2017-04-19 47 views
4

我有一个看起来像这样的数据表:R数据表 - 表达多种子集条件succintly

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]) 

我想子集的数据表只包含与ed,行,f都大比0。我可以用下面的代码做到这一点:

dat[d > 0 & e > 0 & f > 0] 

然而,当我试图表达相同的子集的条件如下,它给了我一个错误:

cols <- c("d", "e", "f") 
dat[cols > 0] 

什么是应该做的正确方法?

谢谢。

回答

3

我们可以通过data.table(.SD)子集指定“的cols”,在.SDcols,循环,检查它是否大于0,然后用Reduce&,我们通过检查得到的逻辑矢量对于相应的行,所有元素都大于0,并将其用于子集数据集的行

dat[dat[, Reduce(`&`, lapply(.SD, `>`, 0)),.SDcols = cols]]