我有一个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' });