用相同的值替换特定行中的所有 NaN - Matlab

Posted

技术标签:

【中文标题】用相同的值替换特定行中的所有 NaN - Matlab【英文标题】:Replace all NaN in specific row with same value - Matlab 【发布时间】:2015-01-18 16:41:08 【问题描述】:

我有一个如下所示的数组 (data2winner):

第 1 至 6 列

1.0894    1.1923    1.0238    1.0625    1.0222    0.9701
1.0000    1.2419    1.2093    0.9412    0.9783    1.0923
1.0379       NaN    1.0000    1.0417    1.0667    1.0000

第 7 到 12 列

0.9661    0.9568    1.0400    0.8519    0.8675    0.9821
0.7895    1.0000       NaN    1.0000    1.1250    0.8182
1.0667    0.7714       NaN    1.0000    0.9383    1.1111

我想用相同的值(例如 0.5)替换同一行(例如第 3 行)中的所有 NaN,这样输出看起来像这样:

第 1 至 6 列

1.0894    1.1923    1.0238    1.0625    1.0222    0.9701
1.0000    1.2419    1.2093    0.9412    0.9783    1.0923
1.0379       **0.5**    1.0000    1.0417    1.0667    1.0000

第 7 到 12 列

0.9661    0.9568    1.0400    0.8519    0.8675    0.9821
0.7895    1.0000       NaN    1.0000    1.1250    0.8182
1.0667    0.7714       **0.5**    1.0000    0.9383    1.1111

我知道我可以使用以下方法将矩阵中的所有 NaN 替换为 0.5:

data2winner(isnan(data2winner)) = 0.5

所以我想用

data2winner(isnan(data2winner(3,:))) = 0.5

会解决我的问题,但它不起作用。有人知道如何解决我的问题吗?任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

isnan(data2winner(3,:)) 为您提供一个由 1 和 0 组成的逻辑数组,其中 NaNs 分别出现在第三行中或不出现在第三行中。然后,您需要索引输入矩阵的第三行并选择具有NaNs 的列(来自isnan 输出的列)并将它们设置为0.5。您的错误是索引到完整的矩阵而不是仅第三行。

因此,应该这样做 -

row_id = 3;
data2winner(row_id,isnan(data2winner(row_id,:))) = 0.5

【讨论】:

非常感谢!完美运行

以上是关于用相同的值替换特定行中的所有 NaN - Matlab的主要内容,如果未能解决你的问题,请参考以下文章

将数据框特定列中的 Nan 值替换为另一个数据框特定列中的值

用数据框的NaN替换特定范围的值

用R中不同数据帧中具有相同ID的行中的值替换列中的NA

Pandas - 用特定组的平均值替换列中的 NaN

将给定 .csv 文件中的现有值替换为 NAN

用列表中的值填充 NaN