Arranging the cell array in the corresponding rows.

1 visualizzazione (ultimi 30 giorni)
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

Risposta accettata

Andrei Bobrov
Andrei Bobrov il 9 Mag 2014
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 Commento
pr
pr il 9 Mag 2014
Modificato: pr il 9 Mag 2014
@Andrei Bobrov thanks for the help. Excellent solution

Accedi per commentare.

Più risposte (1)

the cyclist
the cyclist il 8 Mag 2014
Related to Cedric's question in his comment ... Is it a simple reshape?
c_out = reshape(c_in,2,[])
  2 Commenti
pr
pr il 8 Mag 2014
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 il 8 Mag 2014
Modificato: Cedric il 9 Mag 2014
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.

Accedi per commentare.

Categorie

Scopri di più su Migrate GUIDE Apps in Help Center e File Exchange

Tag

Non è stata ancora inserito alcun tag.

Community Treasure Hunt

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

Start Hunting!

Translated by