How to join matching rows of cells in a particular column order

3 visualizaciones (últimos 30 días)
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.

Respuesta aceptada

Matt J
Matt J el 20 de Nov. de 2019
Editada: Matt J el 20 de Nov. de 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 comentarios
Matt J
Matt J el 20 de Nov. de 2019
Editada: Matt J el 20 de Nov. de 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 ...

Iniciar sesión para comentar.

Más respuestas (0)

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by