data.table - 按除一列以外的所有分组
data.table - group by all except one column
我可以使用 data.table
对除一列以外的所有列进行分组吗?我有很多专栏,所以我宁愿避免写出所有 colnames
.
原因是我想折叠 table 中的重复项,我知道其中一列没有相关性。
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
也就是说,给定 DT
,是否有类似 DT[, print(.SD), by = !collapse]
的东西给出:
> DT[, print(.SD), .(N, val)]
collapse
1: A
collapse
1: B
2: C
而实际上不必指定 .(N, val)
?我知道我可以通过复制和粘贴列名来做到这一点,但我认为也可能有一些优雅的方法来做到这一点。
要按除一列以外的所有列分组,您可以使用:
by = setdiff(names(DT), "collapse")
解释:setdiff
采用setdiff(x, y)
的一般形式,其中returns x
的所有值不在y
。在这种情况下,这意味着除了 collapse
-列之外的所有列名都被返回。
两种选择:
# with '%in%'
names(dt1)[!names(dt1) %in% 'colB']
# with 'is.element'
names(dt1)[!is.element(names(dt1), 'colB')]
我可以使用 data.table
对除一列以外的所有列进行分组吗?我有很多专栏,所以我宁愿避免写出所有 colnames
.
原因是我想折叠 table 中的重复项,我知道其中一列没有相关性。
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
也就是说,给定 DT
,是否有类似 DT[, print(.SD), by = !collapse]
的东西给出:
> DT[, print(.SD), .(N, val)]
collapse
1: A
collapse
1: B
2: C
而实际上不必指定 .(N, val)
?我知道我可以通过复制和粘贴列名来做到这一点,但我认为也可能有一些优雅的方法来做到这一点。
要按除一列以外的所有列分组,您可以使用:
by = setdiff(names(DT), "collapse")
解释:setdiff
采用setdiff(x, y)
的一般形式,其中returns x
的所有值不在y
。在这种情况下,这意味着除了 collapse
-列之外的所有列名都被返回。
两种选择:
# with '%in%'
names(dt1)[!names(dt1) %in% 'colB']
# with 'is.element'
names(dt1)[!is.element(names(dt1), 'colB')]