【问题标题】:Subset by group with data.table compared to aggregate a data.table与 data.table 相比,按组分组子集与聚合 data.table
【发布时间】:2017-02-02 14:52:00
【问题描述】:

这是对Subset by group with data.table 使用相同数据表的后续问题:

library(data.table)

bdt <- as.data.table(baseball)

# Aggregating and loosing information on other columns
dt1 <- bdt[ , .(max_g = max(g)), by = id]
# Aggregating and keeping information on other columns
dt2 <- bdt[bdt[, .I[g == max(g)], by = id]$V1]

为什么dt1 和dt2 的行数不同? dt2 不应该在不丢失其他列中的相应信息的情况下具有相同的结果吗?

【问题讨论】:

  • 查看,例如,bdt[id == "woodge01"][order(-g)]——该 id 有多行最大化g。第二种方法识别所有这样的行,而第一种方法只是返回最大值。这是 max(一个值)和 argmax(一组最大化器)之间的区别:math.stackexchange.com/q/312012
  • 感谢您的回复。这完美地阐明了区别!
  • 酷,如果您愿意,您可以自己发布答案。

标签: r data.table


【解决方案1】:

正如@Frank 指出的那样:

bdt[ , .(max_g = max(g)), by = id]为你提供最大值,而

bdt[bdt[ , .I[g == max(g)], by = id]$V1] 标识具有此最大值的所有行。

请参阅 What is the difference between arg max and max? 以获取数学解释并在 R 中尝试这个纤薄版本:

library(data.table)
bdt <- as.data.table(baseball)

dt <- bdt[id == "woodge01"][order(-g)]
dt[ , .(max = max(g)), by = id]
dt[ dt[ , .I[g == max(g)], by = id]$V1 ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 2019-02-18
    • 2019-02-16
    • 2019-03-21
    相关资源
    最近更新 更多