2013-05-08 34 views
3

0替换为NaN的矩阵元素有一个矩阵,看起来像这样我哪能R中

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)。谢谢!

回答

15

我不认为有任何实际需要,利用你对行的知识,因为更换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

试试这个,它适用于我:

> 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