how to sum the elements of the same row in a cell array?
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
chocho
am 13 Dez. 2018
Kommentiert: Image Analyst
am 13 Dez. 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](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 Kommentare
Akzeptierte Antwort
Stephen23
am 13 Dez. 2018
Bearbeitet: Stephen23
am 13 Dez. 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 Kommentare
Stephen23
am 13 Dez. 2018
Bearbeitet: Stephen23
am 13 Dez. 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,'
Weitere Antworten (1)
KSSV
am 13 Dez. 2018
Bearbeitet: KSSV
am 13 Dez. 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 Kommentare
Image Analyst
am 13 Dez. 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.
Siehe auch
Kategorien
Mehr zu Polar Plots finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!