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

在R语言中对重复PersonID-CalendarYear组合保留指定列最大值

解决重复PersonID-CalendarYear组合的薪资最大值提取问题

你当前代码的问题在于:slice()传入四个which.max()时,每个which.max()会单独选出对应季度薪资最大的那一行,所以每个分组会被提取4行,导致结果重复。

要实现每个PersonID-CalendarYear组合只保留一行、且包含各季度薪资最大值的需求,直接对分组后的各季度列取最大值即可,推荐两种写法:

写法1:指定列逐一取最大值

适合季度列数量较少的情况:

test <- Emp %>% 
  group_by(PersonID, CalendarYear) %>% 
  summarize(
    WagesQ1 = max(WagesQ1, na.rm = TRUE),
    WagesQ2 = max(WagesQ2, na.rm = TRUE),
    WagesQ3 = max(WagesQ3, na.rm = TRUE),
    WagesQ4 = max(WagesQ4, na.rm = TRUE),
    .groups = "drop"  # 可选,用于取消分组状态
  )

写法2:批量处理指定列

适合季度列较多或想简化代码的情况(dplyr 1.0.0及以上版本推荐):

test <- Emp %>% 
  group_by(PersonID, CalendarYear) %>% 
  summarize(
    across(starts_with("WagesQ"), max, na.rm = TRUE),
    .groups = "drop"
  )
  • na.rm = TRUE用于忽略缺失值,如果你的数据中没有NA,可以省略该参数
  • .groups = "drop"会在计算完成后取消分组,让结果回到普通数据框格式

这样处理后,每个PersonID-CalendarYear组合只会保留一行,该行包含对应四个季度薪资的最大值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:47:35