how to rearrange cell array with the grouped sequence
1 回表示 (過去 30 日間)
古いコメントを表示
I have a cell array in this format:
21 3 '1'
31 2 '1 1'
25 1 '2 2 1 1'
How can I rearrange the cell array to:
21 3 1
31 2 1
31 2 1
25 1 2
25 1 2
25 1 1
25 1 1
Thank you!
1 件のコメント
採用された回答
Adam Danz
2020 年 1 月 10 日
C is your input array as I've understood it; D is the output matrix.
% Produce input array
C = {21 3 '1'
31 2 '1 1'
25 1 '2 2 1 1'};
% Convert strings in column 3 to vectors
Cv = cellfun(@(s)str2double(strsplit(s)).',C(:,3),'UniformOutput',false);
% Replicate the rows of C(:,[1,2]) for each value in Cv
C2 = arrayfun(@(i)repmat([C{i,[1,2]}],numel(Cv{i}),1),1:size(C,1),'UniformOutput',false)';
% Combine C2 with Cv values
D = [cell2mat(C2), cell2mat(Cv)];
Result
D =
21 3 1
31 2 1
31 2 1
25 1 2
25 1 2
25 1 1
25 1 1
その他の回答 (1 件)
Stephen23
2020 年 1 月 10 日
>> C = {21,3,'1';31,2,'1 1';25,1,'2 2 1 1'}
C =
[21] [3] '1'
[31] [2] '1 1'
[25] [1] '2 2 1 1'
>> V = cellfun(@(s)sscanf(s,'%f'),C(:,3),'uni',0);
>> Z = [repelem(C(:,1:2),cellfun('length',V),1),num2cell(vertcat(V{:}))]
Z =
[21] [3] [1]
[31] [2] [1]
[31] [2] [1]
[25] [1] [2]
[25] [1] [2]
[25] [1] [1]
[25] [1] [1]
参考
カテゴリ
Help Center および File Exchange で Cell Arrays についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!