我有一个如下所示的数据表:
set.seed(1)
n <- 10; p <- 6
dat <- as.data.table(matrix(sample(c(0,1),n*p,replace = TRUE), n, p) )
setnames(dat, letters[1:p])
我希望将数据表子集化为仅包含列d
,e
,f
大于0
的行。我可以使用以下代码执行此操作:
dat[d > 0 & e > 0 & f > 0]
但是,当我尝试表达如下相同的子集条件时,它会给我一个错误:
cols <- c("d", "e", "f")
dat[cols > 0]
正确的方法是什么?
感谢。
答案 0 :(得分:3)
我们可以在.SDcols
中指定'cols',循环遍历data.table(.SD
)的子集,检查它是否大于0,然后使用Reduce
和&
,我们通过检查相应行的所有元素是否大于0来获取逻辑向量,并使用它来对数据集行进行子集
dat[dat[, Reduce(`&`, lapply(.SD, `>`, 0)),.SDcols = cols]]