Convert nested text cell array
5 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Hi,
I have a nested text cell array of different lengths. I would like to make a table from them.
myarray = {{{'a'}}
{{'b'} {'c'}}}
myarray =
2×1 cell array
{1×1 cell}
{1×2 cell}
Using the suggestion here: https://nl.mathworks.com/matlabcentral/answers/499119-making-cell-array-of-cells-of-strings-the-same-size-by-adding-empty-strings:
maxlen = max(cellfun(@numel, myarray));
newcellarray = cellfun(@(s) [s, repmat({''}, 1, maxlen - numel(s))], myarray, 'UniformOutput', false);
I got this:
newcellarray =
1×2 cell array
{1×2 cell} {1×2 cell}
When I do array2table:
array2table(newcellarray)
ans =
2×1 table
newcellarray
____________
{1×2 cell}
{1×2 cell}
But I would like to get something like:
var1 var2
'a' ''
'b' 'c'
Alternatively, if every row of the cell array would be converted to a python-list like structure, it would be even better:
['a', '']
['b', 'c']
Even better if every list would be different size:
['a']
['b', 'c']
2 Commenti
Stephen23
il 16 Ott 2021
Modificato: Stephen23
il 16 Ott 2021
"if every row of the cell array would be converted to a python-list like structure,"
A python list is basically the same as a MATLAB cell array (i.e. mutable container class), so it is not clear how what you are requsting would be any different from what you show.
MATLAB does not have a "list" type, your examples use the concatenation operator to concatenate character arrays.
Risposta accettata
DGM
il 15 Ott 2021
I'm sure there's a simpler way, but idk.
This will convert to a table. Note that the table columns are cell vectors. This is the normal behavior of cell2table, and is necessary as the alternative would be a char column vector with empty elements -- something which can't exist, as arrays can't have holes in them.
myarray = {{{'a'}}
{{'b'} {'c'}}};
maxlen = max(cellfun(@numel, myarray));
newcellarray = cellfun(@(s) [s, repmat({{''}}, 1, maxlen - numel(s))], myarray, 'UniformOutput', false);
% if the inner cells are scalar:
newcellarray = vertcat(newcellarray{:});
newcellarray = cellfun(@(x) horzcat(x{:}),newcellarray,'uniform',false); % get rid of inner cells
T = cell2table(newcellarray)
I don't know anything about python, but I don't know why it wouldn't suffice to just get rid of the redundant nesting of the original cell array.
% alternative?
newcellarray2 = cellfun(@(x) horzcat(x{:}),myarray,'uniform',false); % get rid of inner cells
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Data Type Conversion in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!