我有一个看起来像这样的矩阵
a = matrix(c(5,10,NaN,NaN,4,5,3,NaN,NaN,2), nr=5)
a
[,1] [,2]
[1,] 5 5
[2,] 10 3
[3,] NaN NaN
[4,] NaN NaN
[5,] 4 2
现在我希望将这些NaN
替换为零。我知道is.nan
函数将返回这些元素的索引,但是我如何利用这样一个事实:如果行中存在NaN
,那么该行的所有元素都是{{1} }(如上例所示,第3行和第4行)。谢谢!
答案 0 :(得分:16)
我认为没有必要利用您对行的了解,因为无论如何替换NaN
都是如此简单:
a[is.nan(a)] = 0
输出:
> a
[,1] [,2]
[1,] 5 5
[2,] 10 3
[3,] 0 0
[4,] 0 0
[5,] 4 2
使用您的方法:
> a = matrix(c(5,10,NaN,NaN,4,5,3,NaN,NaN,2), nr=5)
> nan_rows = is.nan(a[, 1])
> nan_rows
[1] FALSE FALSE TRUE TRUE FALSE
> a[nan_rows, ] = 0
> a
[,1] [,2]
[1,] 5 5
[2,] 10 3
[3,] 0 0
[4,] 0 0
[5,] 4 2
答案 1 :(得分:1)
试试这个,它对我有用:
> a = matrix(c(5,10,NaN,NaN,4,5,3,NaN,NaN,2), nr=5)
> a[is.nan(a)] = 0
> a
[,1] [,2]
[1,] 5 5
[2,] 10 3
[3,] 0 0
[4,] 0 0
[5,] 4 2