Concatenate cell with numeric array in tables
9 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Marcus Watson
el 30 de Oct. de 2019
Comentada: Marcus Watson
el 1 de Nov. de 2019
I have a ridiculously simple problem that I cannot solve. I have two tables and I want to concatenate them, but one contains a column with a cell array and one with a numeric array.
a = table([1; 2; 3]);
b = table({[1 2]; [3 4]})
c = [a; b];
This immediately produces an error because I am trying to concatenate a cell with a non-cell type. But if I just try to concatenate these variables outside a table, it works fine, recognizing that the result should be a cell array. There seems to be no way of telling matlab that I want it to convert a's variable to a cell array.
The actual problem is somewhat more complex - it's easy enough to solve this in the current case by just removing the variables from the table and concatenating them, then making a new table. But in the actual use case the tables have up to 50 variables, and it's unknown at runtime which of them are causing the problem.
Suggestions?
0 comentarios
Respuesta aceptada
Robert U
el 30 de Oct. de 2019
Hi Marcus Watson,
an straight-forward solution would be checking the variable types stored in the table. In case they don't match change the numerical one to cell array.
a = table([1; 2; 3]);
b = table({[1 2]; [3 4]})
if ~cellfun(@isempty,{a{:,vartype('numeric')}}) && cellfun(@isempty,{b{:,vartype('numeric')}})
a = table({a{:,vartype('numeric')}});
elseif cellfun(@isempty,{a{:,vartype('numeric')}}) && ~cellfun(@isempty,{b{:,vartype('numeric')}})
b = table({b{:,vartype('numeric')}});
end
c = [a; b];
In case there are anyway no numerical values to concatenate you can change all tables that are containing numerical values to cells.
Kind regards,
Robert
5 comentarios
Robert U
el 30 de Oct. de 2019
a = table([1; 2; 3]);
b = table({[1 2]; [3 4]});
if cellfun(@isempty,{a{:,vartype('cell')}}) && ~cellfun(@isempty,{b{:,vartype('cell')}})
a = table(num2cell(a{:,vartype('numeric')}));
elseif ~cellfun(@isempty,{a{:,vartype('cell')}}) && cellfun(@isempty,{b{:,vartype('cell')}})
b = table(num2cell(b{:,vartype('numeric')}));
end
c = [a; b];
Más respuestas (0)
Ver también
Categorías
Más información sobre Tables en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!