how to sum the elements of the same row in a cell array?
2 views (last 30 days)
Show older comments
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](https://www.mathworks.com/matlabcentral/answers/uploaded_files/198944/Inputs.png)
wanted_outputs:
I![wanted_outputs.png](https://www.mathworks.com/matlabcentral/answers/uploaded_files/198945/wanted_outputs.png)
![wanted_outputs.png](https://www.mathworks.com/matlabcentral/answers/uploaded_files/198945/wanted_outputs.png)
2 Comments
Accepted Answer
Stephen23
on 13 Dec 2018
Edited: Stephen23
on 13 Dec 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 Comments
Stephen23
on 13 Dec 2018
Edited: Stephen23
on 13 Dec 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,'
More Answers (1)
KSSV
on 13 Dec 2018
Edited: KSSV
on 13 Dec 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 Comments
Image Analyst
on 13 Dec 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.
See Also
Categories
Find more on Polar Plots in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!