删除少于1000个观察值的数据框的列

vit*_*tor 1 r

我有一个数据框,我想删除少于1000个观察的所有列.下面的方法工作正常,但还有更优雅的解决方案吗?

vec <- numeric()

for(i in 1:ncol(dat))
{
    if(length(dat[,i][!is.na(dat[,i])]) >= 1000) 
        vec <- c(vec, i)
}

dat <- dat[,vec]
Run Code Online (Sandbox Code Playgroud)

Jou*_*ske 6

这应该工作:

dat[,colSums(!is.na(dat))>=1000]
Run Code Online (Sandbox Code Playgroud)

这里我们首先看一下哪些元素dat是no NA,并计算这个新数据帧的列和.对于那些包含至少1000个观察值的列,我们得到的TRUE和其他的FALSE.因此我们可以将它用作索引变量,它对原始dat数据帧进行子集化.