删除行如果Nan在Matab



我有一个356x81的matlab表。如果某3个变量(18个变量)的内容是NaN,我想删除行。换句话说,如果这3个变量中的任何一个有NaN,我想要删除这一行。我在另一组中发现了一个很好的例子。

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

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

所有NaN的行都被删除。

我也不知道2是什么。我使用它是因为它在示例中,但我不知道它是什么。

提前感谢您的帮助

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, :);

如果您有R2016b,或者可以升级到它,您应该检查新的rmmissing功能:

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' });

最新更新