我有一个包含许多变量的表,其中一些条目有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表更改为矩阵?
答案 0 :(得分:4)
问题似乎是Index
仍然是一个表格,您始终需要使用row
和column
作为表的索引。我尝试了以下代码(没有中间表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);
另外,如果您可以接受的话,请考虑仅使用数组(不转换为表格或不转换为表格)。