how to sum the elements of the same row in a cell array?

1 vue (au cours des 30 derniers jours)
chocho
chocho le 13 Déc 2018
Commenté : Image Analyst le 13 Déc 2018
Hello guys,
I ave a cell array of 1450 rows and 2 columns(1450*2)
Some rows in column 1 are repeated but with different contents in column2
How can i get these repeated rows in sigle row with the sum of their contents ?
I appreciate any helps:
Inputs:
Inputs.png
wanted_outputs:
Iwanted_outputs.png
  2 commentaires
chocho
chocho le 13 Déc 2018
I applied unique

Connectez-vous pour commenter.

Réponse acceptée

Stephen23
Stephen23 le 13 Déc 2018
Modifié(e) : Stephen23 le 13 Déc 2018
>> C = {'A','hello';'B','live';'C','cat';'A','world';'B','fast'}‡
C =
'A' 'hello'
'B' 'live'
'C' 'cat'
'A' 'world'
'B' 'fast'
>> [U,~,X] = unique(C(:,1));
>> F = @(n) C(n==X,2).';
>> V = arrayfun(F,1:max(X),'uni',0);
>> Z = [U,V(:)]
Z =
'A' {'hello','world'}
'B' {'live','fast'}
'C' {'cat'}
  3 commentaires
Stephen23
Stephen23 le 13 Déc 2018
Modifié(e) : Stephen23 le 13 Déc 2018
@chocho: You can easily concatenate those character vectors together, if that is what you want to do, just change the anonymous function:
>> F = @(n) [C{n==X,2}];
>> V = arrayfun(F,1:max(X),'uni',0);
>> Z = [U,V(:)]
Z =
'A' 'helloworld'
'B' 'livefast'
'C' 'cat'
Or perhaps you want to join them with commas, this is also easy:
>> F = @(n) sprintf('%s, ',C{n==X,2});
>> V = arrayfun(F,1:max(X),'uni',0);
>> Z = [U,strtrim(V(:))]
Z =
'A' 'hello, world,'
'B' 'live, fast,'
'C' 'cat,'

Connectez-vous pour commenter.

Plus de réponses (1)

KSSV
KSSV le 13 Déc 2018
Modifié(e) : KSSV le 13 Déc 2018
C = cell(5,2) ;
C{1,1} = 'apple' ; C{1,2} = 'red' ;
C{2,1} = 'apple' ; C{2,2} = 'round' ;
C{3,1} = 'grapes' ; C{3,2} = 'green' ;
C{4,1} = 'strawberry' ; C{4,2} = 'sweet' ;
C{5,1} = 'grapes' ; C{5,2} = 'small' ;
%
[c,ia,ib] = unique([C(:,1)]) ;
iwant = cell(length(c),2) ;
for i = 1:length(c)
iwant{i,1} = c{i} ;
iwant{i,2} = strjoin(C(ib==i,2)) ;
end
  4 commentaires
Image Analyst
Image Analyst le 13 Déc 2018
I see that he asked for your data (which you could attach in a .mat file with the paper clip icon) and you chose not to. If you make it easy for people to help you, not hard, then you'd get an answer sooner - you'd probably have had the solution by now.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Matrices and Arrays dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by