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

4

我有一张数据表格,长这样:

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个回答

3

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接