您可以使用 .SDcols 对 data.table 中的行进行子集化吗
Can you use .SDcols to subset rows in data.table
有没有办法将数据表中的 .SDcols 用于 select 行。例如,在 mtcars 中,select 行,其中 vs、am 和 carb 都等于 1。我有很多列,希望避免大量输入。
我知道这行不通
mtcars[ lapply( .SD == 1), , .SDcols = c('vs, 'am', 'carb')]
我们可能需要 Reduce
到 return 单个逻辑向量,并将其用作子集的索引
library(data.table)
mtcars[mtcars[, Reduce(`&`, lapply( .SD, `==`, 1)),
.SDcols = c('vs', 'am', 'carb')]]
-输出
mpg cyl disp hp drat wt qsec vs am gear carb
1: 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
2: 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
3: 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
4: 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
或使用rowSums
创建逻辑向量
mtcars[mtcars[, .I[rowSums(.SD == 1) == 3], .SDcols = c('vs', 'am', 'carb') ]]
数据
mtcars <- as.data.table(mtcars)
有没有办法将数据表中的 .SDcols 用于 select 行。例如,在 mtcars 中,select 行,其中 vs、am 和 carb 都等于 1。我有很多列,希望避免大量输入。
我知道这行不通
mtcars[ lapply( .SD == 1), , .SDcols = c('vs, 'am', 'carb')]
我们可能需要 Reduce
到 return 单个逻辑向量,并将其用作子集的索引
library(data.table)
mtcars[mtcars[, Reduce(`&`, lapply( .SD, `==`, 1)),
.SDcols = c('vs', 'am', 'carb')]]
-输出
mpg cyl disp hp drat wt qsec vs am gear carb
1: 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
2: 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
3: 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
4: 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
或使用rowSums
创建逻辑向量
mtcars[mtcars[, .I[rowSums(.SD == 1) == 3], .SDcols = c('vs', 'am', 'carb') ]]
数据
mtcars <- as.data.table(mtcars)