Arranging the cell array in the corresponding rows.

I have a cell array which has the following format: action (a1,a2,a3,...) and followed by the corresponding "id-number" like(01,02,03,.....) i want to generate an output in which all the unique "id-number" belongs to one group.
if true
c_in = {'a1ev01','a1ev02','a2ev01','a2ev02','a3ev01','a3ev02'}; % and so on....
% output
c_out = {'a1ev01','a2ev01','a3ev01';...
'a1ev02','a2ev02','a3ev02';}; % or in another format of the same form
end

1 件のコメント

Cedric
Cedric 2014 年 5 月 8 日
Is there the same number of elements for each group/ID?

サインインしてコメントする。

 採用された回答

Andrei Bobrov
Andrei Bobrov 2014 年 5 月 9 日

1 投票

c_in = {'a1ev01','a1ev02','a2ev01','a2ev02','a3ev01','a3ev02'};
ii = regexp(c_in,'\d*','match');
i1 = str2double(cat(1,ii{:}));
c_out = accumarray([i1(:,2),i1(:,1)],(1:numel(c_in))',[],@(x)c_in(x));

1 件のコメント

pr
pr 2014 年 5 月 9 日
編集済み: pr 2014 年 5 月 9 日
@Andrei Bobrov thanks for the help. Excellent solution

サインインしてコメントする。

その他の回答 (1 件)

the cyclist
the cyclist 2014 年 5 月 8 日

0 投票

Related to Cedric's question in his comment ... Is it a simple reshape?
c_out = reshape(c_in,2,[])

2 件のコメント

pr
pr 2014 年 5 月 8 日
it works only in the case for "2" "id-numbers" fails in the case when ther is a 3rd "id-number" or 4th and so on.
if true
c_in = {'a1ev01','a1ev03','a2ev01','a2ev02','a3ev03','a3ev02'};
end
Cedric
Cedric 2014 年 5 月 8 日
編集済み: Cedric 2014 年 5 月 9 日
If there is always the same number of elements per group/ID and the order follows always the same schema, you (pr) can perform a reshape based on an appropriate number of rows or columns. If the second condition falls, there is a little more work but you can still store the outcome in a rectangular cell array. If both conditions fail, you must build a cell array of cell arrays.

サインインしてコメントする。

カテゴリ

タグ

タグが未入力です。

質問済み:

pr
2014 年 5 月 8 日

編集済み:

pr
2014 年 5 月 9 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by