R aggregate() by group using some function (e.g., max) 然后投影到其他列

标签 r aggregate greatest-n-per-group

给定一个包含 ID 列、值列和日期列的数据框,我想执行以下操作:对于每个 ID(按 ID 分组)返回具有最高值的行的日期。

> df <- data.frame(ID=c(101, 101, 101, 202), Date=c("2013-04-12", "2013-06-21", "2013-07-06", "2013-07-06"), Value=c(3.4, 5.8, 4.2, 2.1))
> df
   ID       Date Value
1 101 2013-04-12   3.4
2 101 2013-06-21   5.8
3 101 2013-07-06   4.2
4 202 2013-07-06   2.1

对于上面的数据框,输出应该是这样的:

   ID       Date
1 101 2013-06-21 # because it has highest Value for ID=101 (i.e., 5.8)
2 202 2013-07-06 # bacause it has highest Value for ID=202 (2.1)

我知道如何使用 aggregate() 通过 ID 获取最大值,但我如何才能返回 Date 列而不是实际聚合的 max() 值?

最佳答案

如果您的数据集很大,这里有一个 data.table 方法:

library(data.table)
df <- data.table(df)
df[ , Date[which.max(Value)], by=ID]
    ID         V1
1: 101 2013-06-21
2: 202 2013-07-06

如果您的数据大小适中并且您没有太多 ID 值(我猜是 > 100 - 500),那么您也可以这样做:

sapply(X=split(df, df$ID),
       FUN=function (k) k$Date[which.max(k$Value)])
       101        202 
2013-06-21 2013-07-06 

关于R aggregate() by group using some function (e.g., max) 然后投影到其他列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17687295/

相关文章:

r - 使用 Genalg 在 R 中进行整数规划

python - 如何从 Jupyter Notebook 获取原始代码?

html - 在 Shiny 中包含 HTML - tabPanel 不会改变大小

r - 汇总和排序数据框

sql - 选择一张信用卡的最新余额大于另一张信用卡的人

r - 精确日期的左连接值,如果缺失则查找前一个值

c# - 是否可以使用 Linq 获取列表列表中的项目总数?

mongoDB mapreduce 运行 3m 文档需要很长时间

mysql - 最简单的 "return highscores"使用 userID 的 SQL 查询

mysql - 按公司表中的多个发票日期排序,但仅显示公司列表