使用R中的坐标从矩阵中删除值

时间:2014-05-30 13:55:07

标签: r matrix na

如果我有两个相同大小的不同矩阵,一个具有NA值而另一个没有,例如:

mat=matrix(rnorm(9, mean=20, sd=10), nrow=3)
mat2=matrix(rnorm(9, mean=20, sd=10), nrow=3)
mat2[mat2<20]=NA

mat
             [,1]      [,2]     [,3]
     [1,] 21.67730 17.978427 17.24766
     [2,] 14.71108 16.970846 30.29543
     [3,] 28.65521  9.191494 18.83665

mat2
             [,1]     [,2]     [,3]
     [1,] 28.6093       NA 32.26887
     [2,]      NA       NA       NA
     [3,]      NA 20.19428 30.25038

我可以在&#39; mat2&#39;中识别NA值的坐标(行/列)。使用:

which(is.na(mat2), TRUE)

然后我如何使用这些坐标替换“垫子”中相同的值。与NA?生产:

mat
             [,1]      [,2]     [,3]
     [1,] 21.67730        NA 17.24766
     [2,]       NA        NA       NA
     [3,]       NA  9.191494 18.83665

这是最好的方法吗?提前谢谢。

2 个答案:

答案 0 :(得分:4)

矩阵在内部表示为向量(有关维度的信息),因此您可以执行类似

的操作
mat[is.na(mat2)] <- NA

这会创建一个布尔向量,指示mat2的哪些元素为NA,然后将NA分配给mat的这些元素。

答案 1 :(得分:3)

要简单地用NA替换这些值,您可以这样做:

tmp <- which(is.na(mat2))
mat[tmp] <- NA