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

1 Ansicht (letzte 30 Tage)
chocho
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
wanted_outputs:
Iwanted_outputs.png
  2 Kommentare
KSSV
KSSV am 13 Dez. 2018
Attach the original data....you need to sue unique
chocho
chocho am 13 Dez. 2018
I applied unique

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Stephen23
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
chocho
chocho am 13 Dez. 2018
@Stephen Cobeldick see what i got for my data just tested one line?
'R-HSA-3000171:R-HSA-3000171' 1x4 cell
This row should have
'R-HSA-3000171:R-HSA-3000171' 'PDGFB, TTR, COL4A6,LAMA1,COL4A5 ,COL11A2,COL3A1'
Yr example is sample.
Stephen23
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,'

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

KSSV
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
chocho
chocho am 13 Dez. 2018
KSSV Could you update yr code to got my iwant plz i want the ',' between in ?
without it i can't continue my work!
Image Analyst
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.

Melden Sie sich an, um zu kommentieren.

Community Treasure Hunt

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

Start Hunting!

Translated by