R语言使用dplyr mutate实现跨分组按最大年份值排名
需求说明
- 基于数据集内最大年份对应的
Value指标值,对Grp分组做全局降序排名 - 同一
Grp下所有年份的记录共享该分组的排名值 - 要求使用dplyr的
mutate方案实现,输出结果可直接通过管道传入后续数据处理、绘图流程
示例输入数据
data <- structure(list( YEAR = c(2020L, 2019L, 2020L, 2019L, 2020L, 2019L), Grp = c("A", "A", "B", "B", "C", "C"), Value = c(25L, 24L, 35L, 34L, 45L, 44L)), class = "data.frame", row.names = c(NA, -6L))
示例预期:最大年份为2020年,C组2020年Value=45排第1,B组2020年Value=35排第2,A组2020年Value=25排第3,各组2019年记录Rank值与2020年保持一致。
实现代码
library(dplyr) result <- data %>% group_by(Grp) %>% # 匹配当前分组最大年份对应Value在全局最大年份Value降序序列中的位置,即为排名 mutate(Rank = match( x = Value[YEAR == max(YEAR)], table = sort(.$Value[.$YEAR == max(.$YEAR)], decreasing = TRUE) )) %>% ungroup()
输出结果
运行代码后得到的结果完全符合预期:
# A tibble: 6 × 4 YEAR Grp Value Rank <int> <chr> <int> <int> 1 2020 A 25 3 2 2019 A 24 3 3 2020 B 35 2 4 2019 B 34 2 5 2020 C 45 1 6 2019 C 44 1
该实现全程在dplyr管道流程内完成,输出结果可直接接入ggplot()等后续绘图步骤,无需额外数据格式转换。
内容的提问来源于stack exchange,提问作者Keelin
相关产品推荐
相关产品推荐

