How to join matching rows of cells in a particular column order
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I have a cell array containtin strings and numbers. I'd like to combine rows that have matching key values, but I need the colums to stay in the same place. Most rows will have a single matching row- more than one match is not possible. Some cells in every row will have empty (0x0 double) values- these essentially will be overwritten by the data in the matching row column.
a={'201901' 'timeA' 123 []; ...
'201901' 'timeB' [] 22; ...
'201901' 'timeA' [] 456; ...
'201902' 'timeA' 999 []; ...
'201901' 'timeB' 11 []}
the output should be:
b={'201901' 'timeA' 123 456;...
'201901' 'timeB' 11 22; ...
'201902' 'timeA' 999 []}
Not sure if there is something like join for cells. Seem ls like unique(a(:,1:2),'rows') will not work on cells either.
0 commentaires
Réponse acceptée
Matt J
le 20 Nov 2019
Modifié(e) : Matt J
le 20 Nov 2019
Not sure why you're working with cells, rather than tables, but it's easy enough to switch back and forth.
A=cell2table(a);
B=varfun(@(z){max([z{:}])}, A,'GroupingVariables',[1,2]); %EDITED
B.GroupCount=[];
b=table2cell(B)
3 commentaires
Matt J
le 20 Nov 2019
Modifié(e) : Matt J
le 20 Nov 2019
Here's what I get,
>> A=cell2table(a);
B=varfun(@(z){max([z{:}])}, A,'GroupingVariables',[1,2]);
B.GroupCount=[];
b=table2cell(B)
b =
3×4 cell array
{'201901'} {'timeA'} {[123]} {[ 456]}
{'201901'} {'timeB'} {[ 11]} {[ 22]}
{'201902'} {'timeA'} {[999]} {0×0 double}
Maybe you were using a previous edit ...
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Monte Carlo Analysis 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!