如果结果大于阈值,则计算与NA不同的值并丢弃列

时间:2014-07-31 18:13:12

标签: r if-statement data.table na

我试图在data.table对象中验证哪些列具有大于某个阈值的非空数据(非NA)值(例如:5),然后丢弃未通过的列标准。

考虑以下数据:

require(data.table)
DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,NA,6), v=c(1,2,NA,NA,NA,NA,NA,8,9))
DT
   x  y  v
1: a  1  1
2: a NA  2
3: a  6 NA
4: b  1 NA
5: b NA NA
6: b  6 NA
7: c  1 NA
8: c NA  8
9: c  6  9

在上面的示例中,列v只有4个非NA值,小于5,所以我想要丢弃该列:

DT[,c(3) := NULL]
DT
   x  y
1: a  1
2: a NA
3: a  6
4: b  1
5: b NA
6: b  6
7: c  1
8: c NA
9: c  6

我需要帮助才能理解将.N *符号和' if语句'组合在一起的方法。使用data.table检查具有多列的对象。

我的问题是,如何在所有列中以编程方式进行计数,并仅丢弃未通过标准的那些? TKS。

*我不确定是否需要.N但是从之前的研究中我知道这个符号用于计算内部data.table对象

1 个答案:

答案 0 :(得分:2)

这是一种方法:

DT[, which(lapply(DT, function(x) sum(!is.na(x))) < 5) := NULL]

由于data.table是列的列表,lapply遍历各列并应用所需的函数。在此之后which枚举我们感兴趣的列,:=将其删除。