如何在R中将矩阵元素的NaN替换为0

5

我有一个长这样的矩阵

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,则该行的所有元素都是NaN的事实呢(就像上面的示例中,第3行和第4行)?谢谢!
2个回答

23

我认为没有必要利用你对行的知识,因为无论如何替换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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接