如何删除R中只包含缺失值的行?

Ift*_*har 5 r

我有一个包含11列和100000行(例如)的大型数据集,其中我有1,2,3,4的值.其中4是缺失值.有些行完全丢失了.即所有11列中的4个.例如

"4"  "4"  "4"  "4"  "4"  "4"  "4"  "4"  "4"  "4"   "4"
Run Code Online (Sandbox Code Playgroud)

现在我需要的是只删除那些完全缺失的行.简单来说,我想保留缺少值小于11的行.我使用了na.omit,但它在我的情况下不起作用.

提前致谢.

And*_*rie 11

也许你最好的选择是利用R的习语来处理遗漏或NA价值观.一旦您有编码NA值,您就可以complete.cases轻松实现您的目标.

创建一些缺少值的示例数据(即值为4):

set.seed(123)
m <- matrix(sample(1:4, 30, prob=c(0.3, 0.3, 0.3, 0.1), replace=TRUE), ncol=6)
m[4, ] <- rep(4, 6)
Run Code Online (Sandbox Code Playgroud)

将所有等于4的值替换为NA:

m[m==4] <- NA
m
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    1   NA    2    2    2
[2,]    2    3    3    1    2    3
[3,]    3    2    2    1    2    3
[4,]   NA   NA   NA   NA   NA   NA
[5,]   NA    3    1   NA    2    1
Run Code Online (Sandbox Code Playgroud)

现在您可以使用各种处理NA值的函数.例如,complete.cases只会返回,你猜对了,完整的情况:

m[complete.cases(m), ]

     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    2    3    3    1    2    3
[2,]    3    2    2    1    2    3
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅?complete.cases?na.failstats包中.


Joh*_*ohn 2

真正快速的方法是使用一点数学知识。假设您的数据框称为 datf

rsum <- rowSums(datf)
datf <- datf[rowSums != 44,] #11 * 4
Run Code Online (Sandbox Code Playgroud)

(也适用于矩阵)

  • 我不会给你负1分,但这种做法是非常危险的。它适用于这种特定情况,但如果添加/删除列会发生什么?始终尝试以稳健的方式解决问题。 (2认同)