You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R数据框如何按分组取最大值对应日期生成新字段且保留全量记录

方案1:data.table(百万级数据最优,性能最高)

该方案全程原地修改数据,无额外复制开销,100万条记录可秒级完成,不会删除任何行,所有原有字段完整保留:

# 安装加载包
install.packages("data.table")
library(data.table)

# 构造样例数据(你可以跳过这步直接用自己的数据集)
df <- data.frame(
  Category = c(rep("A",8),rep("B",3),rep("C",4)),
  Index = c(1:8,1:3,1:4),
  Date = c("01/01/2020","01/02/2020","01/03/2020","01/04/2020","01/05/2020","01/06/2020","01/07/2020","29/07/2020","01/01/2014","01/02/2014","01/01/2015","01/01/2014","01/01/2015","01/01/2016","01/01/2017")
)

# 转换为data.table格式
setDT(df)

# 按Category分组,取每组Index最大值对应的Date赋值给全组New_Date
df[, New_Date := Date[which.max(Index)], by = Category]

方案2:dplyr(写法更易懂,性能也远优于for循环)

如果你更习惯tidyverse语法,用这个方案也完全满足需求:

# 安装加载包
install.packages("dplyr")
library(dplyr)

df <- df %>%
  group_by(Category) %>%
  mutate(New_Date = Date[which.max(Index)]) %>%
  ungroup()

两种方案输出结果完全符合你给出的样例要求,不需要额外调整字段顺序,原有50个字段全部保留。

内容的提问来源于stack exchange,提问作者Alvo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 15:24:07