【问题标题】:data.table - group by all except one columndata.table - 按除一列之外的所有内容分组
【发布时间】:2015-09-07 13:55:10
【问题描述】:

我可以按除使用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

也就是说,给定DT,有没有像DT[, print(.SD), by = !collapse] 这样的东西:

> DT[, print(.SD), .(N, val)]
   collapse
1:        A
   collapse
1:        B
2:        C

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

【问题讨论】:

标签: r data.table


【解决方案1】:

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

by = setdiff(names(DT), "collapse")

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


两种选择:

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

# with 'is.element'
names(dt1)[!is.element(names(dt1), 'colB')]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-21
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 2014-02-09
    相关资源
    最近更新 更多