我有一个数据框,我想删除少于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]
答案 0 :(得分:6)
这应该有效:
dat[,colSums(!is.na(dat))>=1000]
在这里,我们首先查看dat
中的哪些元素是否为NA
,并计算此新数据框的列总和。对于包含至少1000个观察值的列,我们得到TRUE
,其他FALSE
。因此,我们可以将其用作索引变量,该变量子集原始dat
数据框。