我有一个看起来像这样的数据表:
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]
正确的方法是什么?
谢谢。
我们可以在 .SDcols
中指定'cols'''''''''''''''''''''''''''''''''that data..table.table( .SD
(,检查它是否大于0,然后使用Reduce
和&
,我们通过检查相应的行是否所有元素大于0,并使用该元素将数据集的行
dat[dat[, Reduce(`&`, lapply(.SD, `>`, 0)),.SDcols = cols]]