在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
相关产品推荐
相关产品推荐

