How to join matching rows of cells in a particular column order
2 views (last 30 days)
Show older comments
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 Comments
Accepted Answer
Matt J
on 20 Nov 2019
Edited: Matt J
on 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 Comments
Matt J
on 20 Nov 2019
Edited: Matt J
on 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 ...
More Answers (0)
See Also
Categories
Find more on Testing Frameworks 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!