从Matlab中的表中的所有变量中删除NaN

时间:2015-03-31 07:22:26

标签: matlab

我有一个包含许多变量的表,其中一些条目有NaN个。我想将所有NaN替换为0.我能够找到NaN的代码:

T = table(rand(200,1),[rand(199,1);NaN],rand(200,1));
Index = varfun(@isnan,T);

但是,当我尝试将索引应用于表时,T:

T(Index)=0;

我收到以下错误:

You can not subscript a table using only one subscript. Table subscripting requires both row and variable subscripts.

有一个简单的解决方案,还是我需要将from表更改为矩阵?

2 个答案:

答案 0 :(得分:4)

问题似乎是Index仍然是一个表格,您始终需要使用rowcolumn作为表的索引。我尝试了以下代码(没有中间表Index)并且它可以工作,虽然我不确定这是最好的解决方案。

[i,j] = ind2sub(size(T),find(isnan(T{:,:})));
T(i,j) = {0};

答案 1 :(得分:1)

一种方法是转换为数组,使用逻辑索引进行替换,然后返回表:

T = table(rand(200,1),[rand(199,1);NaN],rand(200,1));
t = table2array(T);
t(isnan(t)) = 0;
T = array2table(t, 'VariableNames', T.Properties.VariableNames);

另外,如果您可以接受的话,请考虑仅使用数组(不转换为表格或不转换为表格)。