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
我有一个 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