假设您有一个9列的数据框。您要删除在5:9栏中具有所有NA的案例。如果1:4列中有NA,则根本不相关。
到目前为止,我已经找到了允许您删除在5:9的任何列中具有NA的行的函数,但是我特别需要仅删除在5:9的列中具有所有NA的那些行。
我编写了自己的函数来执行此操作,但是由于我有300k +行,因此速度非常慢。我想知道是否有更有效的方法?这是我的代码:
remove.select.na<-function(x, cols){
nrm<-vector("numeric")
for (i in 1:nrow(x)){
if (sum(is.na(x[i,cols]))<length(cols)){
nrm<-c(nrm,i)
}
#Console output to track the progress
cat('\r',paste0('Checking row ',i,' of ',nrow(x),' (', format(round(i/nrow(x)*100,2), nsmall = 2),'%).'))
flush.console()
}
x<-x[nrm,]
rm(nrm)
return(x)
}
其中x是数据帧,而cols是一个向量,其中包含应检查NA的列的名称。
这样一来就可以删除5到9之间所有列中带有NA的行。通过rowSums()
与之结合,is.na()
很容易检查这5列中的所有条目是否为NA
:
x <- x[rowSums(is.na(x[,5:9]))!=5,]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句