在 Matlab 中删除 Nan 行

Removing Rows if Nan in Matab

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

只是因为我的数据是 table 格式,我在使用 isnan 时遇到问题 我正在使用 ismissing,但我不知道如何 select 3个特定变量。现在如果我使用:

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

删除任何包含 NaN 的行。

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

非常感谢您的帮助。

2 指定如果一行(第二维)中的 任何 个值缺失,则它将 return true.

您可以 select 通过使用变量名的单元格数组作为 table 中的列索引来仅关注您关心的列。然后我们可以使用 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 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' });