R数据表 - 简单地表达多个子集条件

时间:2017-04-19 15:18:04

标签: r data.table

我有一个如下所示的数据表:

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

我希望将数据表子集化为仅包含列def大于0的行。我可以使用以下代码执行此操作:

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

但是,当我尝试表达如下相同的子集条件时,它会给我一个错误:

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

正确的方法是什么?

感谢。

1 个答案:

答案 0 :(得分:3)

我们可以在.SDcols中指定'cols',循环遍历data.table(.SD)的子集,检查它是否大于0,然后使用Reduce&,我们通过检查相应行的所有元素是否大于0来获取逻辑向量,并使用它来对数据集行进行子集

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