如果Nan在Matab中删除行

时间:2016-09-27 21:19:29

标签: matlab row nan

我在matlab中有一张356x81的表格。 如果某个3个变量(18个变量中的)的内容为NaN,我想删除行。换句话说,如果这三个变量中的任何一个具有NaN,我希望删除该行。 我找到了a good example on another group

只是因为我的数据采用表格格式而且我遇到问题isnan我使用的ismissing有效,但我不知道如何选择3个特定变量。现在,如果我使用:

B = mydata(~any(ismissing(mydata),2),:);

删除了NaN的所有行。

另外,我无法弄清2是什么。我使用它是因为它在示例中,但我不知道它是什么。

非常感谢您提供任何帮助。

2 个答案:

答案 0 :(得分:0)

2指定如果某行(第二维)中的任何值丢失,则会返回true

您可以通过使用变量名称的单元格作为表格的列索引来仅选择您关注的列。然后,我们可以使用ismissing检查缺失值,并使用any确定其中是否有NaN

toremove = any(ismissing(t(:, {'Var1', 'Var2', 'Var3'})), 2);
subtable = t(~toremove,:);

或者,如果您希望所有三个都被NaN以便删除行,我们可以使用and代替

toremove = all(ismissing(t(:, {'Var1', 'Var2', 'Var3'})), 2);
subtable = t(~toremove, :);

答案 1 :(得分:0)

如果你有R2016b,或者可以升级到它,你应该看看新的rmmissing function

x = rand(10,1); x(4) = NaN;
y = rand(10,1); y(2) = NaN;
z = rand(10,1); z(1) = NaN;
T = table(rand(10,1), x, y, z);
rmmissing(T, 'DataVariables', { 'x', 'y', 'z' });