如果行为“空”,则用单个默认值交换矩阵中的NA。

时间:2019-01-31 16:57:58

标签: r matrix na

我有一个包含多个列和行的巨大矩阵。 它包含数值和NA。

这是我的问题: 我有些行仅包含NA,这意味着它们基本上是空的。 这些行干扰了我的进一步计算,但我也不能只删除它们。

现在我的问题:

我可以在矩阵上使用一个快速函数来用相同的单个值替换这些行中的NA(让我们说0或99,这是不相关的!)吗? 但是-重要-仅对于行行列是空的(仅NA)?

3 个答案:

答案 0 :(得分:3)

您只需要索引全部为NA的行,然后将它们替换为赋值。您可以使用mixedStateImageis.na()rowSums()来实现。我将它们全部写在下面,因此您可以看到其工作原理:

ncol()

输出:

x <- rbind(c(1, 2, NA), c(NA, NA, NA), c(NA, 5, 6), c(7, NA, 9))
x
is.na(x)
rowSums(is.na(x))
ncol(x)
# This is the single line that does all the work
x[rowSums(is.na(x)) == ncol(x),] <- 99
x

答案 1 :(得分:1)

mdat
          C.1 C.2 C.3
row1        1   2   3
row2       11  12  13
rowpartNA   2   2  NA
rowNA      NA  NA  NA

all.na.fun<- function(x)all(is.na(x))
apply(mdat, 1, all.na.fun)
     row1      row2 rowpartNA     rowNA 
    FALSE     FALSE     FALSE      TRUE 
> all.na.fun<- function(x)all(is.na(x))
(all.na.row<-apply(mdat, 1, all.na.fun))
     row1      row2 rowpartNA     rowNA 
    FALSE     FALSE     FALSE      TRUE 
mdat[all.na.row,] <-99
mdat
          C.1 C.2 C.3
row1        1   2   3
row2       11  12  13
rowpartNA   2   2  NA
rowNA      99  99  99

答案 2 :(得分:1)

矩阵:

m <- matrix(c(1,2,3,4,
             NA,NA,NA,NA,
             NA, 1, 2, 3,
             1,2, NA, 4, 
             4,2,1,3),  nrow=5, byrow = T )

语法:

m[which(rowSums(is.na(m))==ncol(m)),]=999

输出:

> m
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]  999  999  999  999
[3,]   NA    1    2    3
[4,]    1    2   NA    4
[5,]    4    2    1    3