data.table - 除了一列之外的所有组

Akh*_*air 6 r data.table

我可以按所有列进行分组,除了一个使用data.table吗?我有很多专栏,所以我宁愿避免写出所有专栏colnames.

原因是我想在表格中折叠重复项,我知道一列没有相关性.

library(data.table)

DT <- structure(list(N = c(1, 2, 2), val = c(50, 60, 60), collapse = c("A", 
"B", "C")), .Names = c("N", "val", "collapse"), row.names = c(NA, 
-3L), class = c("data.table", "data.frame"))

> DT
   N val collapse
1: 1  50        A
2: 2  60        B
3: 2  60        C
Run Code Online (Sandbox Code Playgroud)

也就是说,给出DT了类似的东西DT[, print(.SD), by = !collapse]给出了:

> DT[, print(.SD), .(N, val)]
   collapse
1:        A
   collapse
1:        B
2:        C
Run Code Online (Sandbox Code Playgroud)

没有实际指定.(N, val)?我意识到我可以通过复制和粘贴列名来做到这一点,但我认为也可能有一些优雅的方法来做到这一点.

Jaa*_*aap 12

要按除一个列之外的所有列进行分组,您可以使用:

by = setdiff(names(DT), "collapse")
Run Code Online (Sandbox Code Playgroud)

说明:setdiff采用其一般形式setdiff(x, y)返回x不在其中的所有值y.在这种情况下,它意味着返回除collapse-column 之外的所有列名.


两种选择:

# with '%in%'
names(dt1)[!names(dt1) %in% 'colB']

# with 'is.element'
names(dt1)[!is.element(names(dt1), 'colB')]
Run Code Online (Sandbox Code Playgroud)