我有一个包含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.fail在stats包中.
真正快速的方法是使用一点数学知识。假设您的数据框称为 datf
rsum <- rowSums(datf)
datf <- datf[rowSums != 44,] #11 * 4
Run Code Online (Sandbox Code Playgroud)
(也适用于矩阵)