4

我有一个看起来像这样的矩阵

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函数将返回这些元素的索引,但是我如何利用这样一个事实,即如果 aNaN存在于一行中,那么该行的所有元素都是NaN's(如上例中的第 3 行和第 4 行) . 谢谢!

4

2 回答 2

21

我认为没有任何真正需要利用您对行的了解,因为NaN无论如何替换 's 都很容易:

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
于 2013-05-08T22:47:39.107 回答
2

试试这个,它对我有用:

> 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
于 2013-05-08T22:50:07.363 回答