我试图在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对象
答案 0 :(得分:2)
这是一种方法:
DT[, which(lapply(DT, function(x) sum(!is.na(x))) < 5) := NULL]
由于data.table
是列的列表,lapply
遍历各列并应用所需的函数。在此之后which
枚举我们感兴趣的列,:=
将其删除。