1

我有一个数据框,我想删除所有少于 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]
4

1 回答 1

7

这应该有效:

dat[,colSums(!is.na(dat))>=1000]

在这里,我们首先查看其中的哪些元素dat是 no NA,并计算这个新数据帧的列总和。对于我们得到的至少包含 1000 个观察值的列,对于其他TRUEFALSE。所以我们可以把它作为一个索引变量来子集原始dat数据框。

于 2013-03-18T17:34:18.757 回答