library(data.table)
a <- mtcars
setDT(a)
b <- a[,colSums(.SD)>500,.SDcols=setdiff(names(a),c("vs","am"))]
在这个人为的示例中,我想选择满足colSums
条件的列,而不使用vs
和am
列。上面的代码仅产生正确列的逻辑向量,但没有实际将所需的整个列选择到新的dt中。此外,对setdiff
的.SDcols
解决方案似乎非常简洁和冗长。有没有更有效/简洁的语法来做到这一点-我尝试使用.SDcols = -c(“ vs”,“ am”)毫无帮助?
我们可以使用.SD
根据逻辑向量选择列
library(data.table)
a[, .SD[, colSums(.SD)>500, with = FALSE],.SDcols=setdiff(names(a),c("vs","am"))]
如果我们想做rowSums
,只需将其用作索引
d <- a[, .SD[rowSums(.SD)>300],.SDcols=-c(8,9)]