如何从行中所有元素为NA的矩阵或数据框中删除行?
所以从中得到:
[,1] [,2] [,3]
[1,] 1 6 11
[2,] NA NA NA
[3,] 3 8 13
[4,] 4 NA NA
[5,] 5 10 NA
到此:
[,1] [,2] [,3]
[1,] 1 6 11
[2,] 3 8 13
[3,] 4 NA NA
[4,] 5 10 NA
因为na.omit的问题是它删除了任何 NAs的行,所以会给我这个:
[,1] [,2] [,3]
[1,] 1 6 11
[2,] 3 8 13
到目前为止我能做的最好的事情是使用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
但这似乎很复杂(有什么比我更缺的简单吗?)....
感谢。
答案 0 :(得分:45)
使用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
答案 1 :(得分:39)
跨行扫描all(is.na())
的测试,并删除true。这样的事情(未经测试,因为您没有提供生成数据的代码 - dput()
是您的朋友):
R> ind <- apply(X, 1, function(x) all(is.na(x)))
R> X <- X[ !ind, ]