我有这样一种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 =子集”]的形式对您的数据进行子集的能力,我还没有找到一种直接的方式来对单个子集进行子集化价值条件。
答案 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