通过colSums选择列并通过data.table中的rowSums进行过滤

问题描述 投票:0回答:1
library(data.table)
a <- mtcars
setDT(a)
b <- a[,colSums(.SD)>500,.SDcols=setdiff(names(a),c("vs","am"))]

在这个人为的示例中,我想选择满足colSums条件的列,而不使用vsam列。上面的代码仅产生正确列的逻辑向量,但没有实际将所需的整个列选择到新的dt中。此外,对setdiff.SDcols解决方案似乎非常简洁和冗长。有没有更有效/简洁的语法来做到这一点-我尝试使用.SDcols = -c(“ vs”,“ am”)毫无帮助?

r data.table
1个回答
1
投票

我们可以使用.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)]
© www.soinside.com 2019 - 2024. All rights reserved.