gpt4 book ai didi

r - 删除在某些列中具有所有NA的行

转载 作者:行者123 更新时间:2023-12-03 13:48:22 33 4
gpt4 key购买 nike

假设您有一个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,]

关于r - 删除在某些列中具有所有NA的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51596658/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com