Fastest way to replace NaNs by empty cells in a table

29 Ansichten (letzte 30 Tage)
Blue
Blue am 25 Jun. 2020
Kommentiert: Adam Danz am 30 Jun. 2020
Hi,
I need to replace the NaNs in the columns a and b by empty cells. The code below works but it is pretty slow. Is there a faster way to do this ?
a = rand(1, 1000000)'; a(1:10000) = NaN;
b = rand(1, 1000000)'; b(1:10000) = NaN;
c = repelem({'A101'}, 1000000)';
t = table(a, b, c);
var_names = t.Properties.VariableNames;
for ii = 1:length(var_names)
if ~iscell(t.(var_names{ii}))
t.(var_names{ii}) = cellstr(num2str(t.(var_names{ii})));
idx = contains(t.(var_names{ii}), 'NaN');
t.(var_names{ii})(idx) = {''};
end
end
Thank you,
  1 Kommentar
Adam Danz
Adam Danz am 30 Jun. 2020
I urge you not to do this. The table variables in columns 1 and 2 are numeric and NaN values indicate missing values. To replace the NaN values with emtpy cells, all of your numeric values will have to converted to cells. That not only looks ugly but it makes the table more difficult to work with.
If you're writing the table to a file and do not want NaN values printed, there are other ways around that.
Converting the numeric values to cells just so the NaN values can appear as empty will likely cause more problems than it aesthetically solves.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Fangjun Jiang
Fangjun Jiang am 25 Jun. 2020
M=10;N=5;
a = rand(1, M)'; a(1:N) = NaN;
b = rand(1, M)'; b(1:N) = NaN;
c = repelem({'A101'}, M)';
t = table(a, b, c);
t.a=num2cell(t.a);
t.a(cellfun(@isnan,t.a))={''}

Weitere Antworten (0)

Kategorien

Mehr zu Argument Definitions finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by