选择数据表中的连续和非连续列,如dplyr的group_by

xiozqbni  于 2023-04-03  发布在  其他
关注(0)|答案(1)|浏览(107)

group_by的好处是它允许你选择连续的列:然后如果有不连续的,可以用“,”分隔。但是,在data.table中似乎不能这样做

library(data.table)

# create a sample data.table
dt <- data.table(a = c("A", "A", "B", "B"), b = c(1, 2, 3, 4), c = c(5, 6, 7, 8), d = c(9, 10, 11, 12))

# group by columns a, b, c, and d
dt[, .(sum(b)), by = .(a, c:d)]

有办法做到吗?

ilmyapht

ilmyapht1#

像这样使用subset.data.table

dt[, .(sum(b)), by = names(subset(dt, select = c(a, c:d)))]
##    a c  d V1
## 1: A 5  9  1
## 2: A 6 10  2
## 3: B 7 11  3
## 4: B 8 12  4

dt[, .(sum(b)), by = setdiff(names(dt), "b")]

或者使用collapse包中的slt,我们可以写出下面的代码。dplyr中的select也可以用来代替slt,代价是增加一些额外的字符。

library(data.table)
library(collapse)
dt[, .(sum(b)), by =  names(slt(dt, a, c:d))]

相关问题