如何用dplyr获取分组最大死亡数及对应火灾场景信息
优化后的dplyr解决方案
简洁核心实现
max_fatality <- fire_data |> group_by(Type, Description.of.fire.accident.scene) |> summarize(Total_fatality = sum(dead), .groups = "drop_last") |> slice_max(Total_fatality, n = 1) |> ungroup()
步骤解释
- 先按
Type和事故场景分组,计算每组的年度总死亡数Total_fatality,.groups = "drop_last"保留Type的分组状态,避免后续重复分组。 - 调用
slice_max()直接在每个Type组内筛选出总死亡数最大的行,n=1确保只取最大值对应的记录;如果存在多个场景总死亡数并列最大,可去掉n=1或添加with_ties=FALSE控制是否保留并列项。 - 最后用
ungroup()取消分组,得到结构清晰的tibble结果。
备选窗口函数实现
如果需要更灵活的逻辑判断,也可以用窗口函数标记最大值后筛选:
max_fatality <- fire_data |> group_by(Type, Description.of.fire.accident.scene) |> summarize(Total_fatality = sum(dead), .groups = "drop") |> group_by(Type) |> mutate(is_max = Total_fatality == max(Total_fatality)) |> filter(is_max) |> select(-is_max) |> ungroup()
内容的提问来源于stack exchange,提问作者Sourav_Hasan
相关产品推荐
相关产品推荐

