data.table 按组求和 return 行取最大值

data.table sum by group and return row with max value

我有一个 data.table 这种方式:

dd <- data.table(f = c("a", "a", "a", "b", "b"), g = c(1,2,3,4,5))
dd

我需要通过因子 f 对值 g 求和,最后 return 具有最大值 [=16= 的单行 data.table 对象],但也包含因子信息。即

___f|g   
1: b 9

我目前最接近的尝试是

tmp3 <- dd[, sum(g), by = f][, max(V1)]
tmp3

这导致:

> tmp3
[1] 9

编辑:理想情况下,我正在寻找 code/workflow 的纯粹 data.table 片段。令我惊讶的是,凭借所有快速的快速拆分-应用-组合魔法和以“example[i= subset, ]` 的形式对数据进行子集化的能力,我还没有找到一种直接的方法来对单个子集进行子集化值条件。

这是一种方法:

library(data.table)
dd <- data.table(
  f = c("a", "a", "a", "b", "b"), 
  g = c(1,2,3,4,5))
##
> dd[,list(g = sum(g)),by=f][which.max(g),]
   f g
1: b 9

您可以在 data.table 上使用 dplyr 语法,在这种情况下:

library(dplyr)
dd %>%
  group_by(f) %>%
  summarise (g = sum(g)) %>%
  top_n(1, g)

Source: local data table [1 x 2]

  f g
1 b 9