data.table按组排序和返回具有最大值的行

时间:2015-03-23 13:42:32

标签: r data.table

我有这样一种data.table:

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

我需要将值g与因子f相加,最后返回单行data.table对象,其最大值为g,但也包含该因子信息。即。

___f|g   
1: b 9

到目前为止,我最接近的尝试是

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

结果是:

> tmp3
[1] 9

编辑:我理想地寻找纯粹的data.table代码/工作流程。我很惊讶,所有快速的快速拆分 - 应用 - 组合技术以及以“示例[i =子集”]的形式对您的数据进行子集的能力,我还没有找到一种直接的方式来对单个子集进行子集化价值条件。

2 个答案:

答案 0 :(得分:6)

这是一种方法:

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

答案 1 :(得分:5)

您可以在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