删除R矩阵中所有数据均为NA的行

Tho*_*wne 38 r

可能重复:
删除R中数据文件的空行

如何从矩阵或数据框中删除行,其中行中的所有元素都是NA?

所以要从中得到:

     [,1] [,2] [,3]
[1,]    1    6   11
[2,]   NA   NA   NA
[3,]    3    8   13
[4,]    4   NA   NA
[5,]    5   10   NA
Run Code Online (Sandbox Code Playgroud)

对此:

     [,1] [,2] [,3]
[1,]    1    6   11
[2,]    3    8   13
[3,]    4   NA   NA
[4,]    5   10   NA
Run Code Online (Sandbox Code Playgroud)

因为na.omit的问题是它删除了任何 NAs的行,所以会给我这个:

     [,1] [,2] [,3]
[1,]    1    6   11
[2,]    3    8   13
Run Code Online (Sandbox Code Playgroud)

到目前为止我能做的最好的是使用apply()函数:

> x[apply(x, 1, function(y) !all(is.na(y))),]
     [,1] [,2] [,3]
[1,]    1    6   11
[2,]    3    8   13
[3,]    4   NA   NA
[4,]    5   10   NA
Run Code Online (Sandbox Code Playgroud)

但这看起来很复杂(有什么比我想念的更简单吗?)....

谢谢.

42-*_*42- 48

使用rowSums()的解决方案通常优于apply()的解决方案:

m <- structure(c( 1,  NA,  3,  4,  5, 
                  6,  NA,  8, NA, 10, 
                 11,  NA, 13, NA, NA), 
               .Dim = c(5L, 3L))

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

     [,1] [,2] [,3]
[1,]    1    6   11
[2,]    3    8   13
[3,]    4   NA   NA
[4,]    5   10   NA
Run Code Online (Sandbox Code Playgroud)


Dir*_*tel 40

扫描跨行的测试 all(is.na()),并删除true.这样的事情(未经测试,因为您没有提供生成数据的代码 - dput()是您的朋友):

 R> ind <- apply(X, 1, function(x) all(is.na(x)))
 R> X <- X[ !ind, ]
Run Code Online (Sandbox Code Playgroud)

  • 是啊.是星期五. (8认同)