R语言dplyr分组汇总如何对数据列实际值求和而非统计行数
按区域+年份分组汇总累计死亡人数实现方法
需求背景
你手中的冲突记录数据集每行对应1起冲突事件,包含死亡人数字段,覆盖2017-2022年共10个不同区域,各年份、各区域的事件条目数不均。需要生成新数据框,实现每个区域对应每个年份仅保留1条记录,汇总展示该区域对应年份的累计死亡人数,最终每个区域共6条记录(分别对应6个年份)。
你已掌握分组统计条目数的代码写法,但需要实现死亡人数的分组求和,原有计数代码如下:
data_mali%>% dplyr::group_by(admin1, year)%>% dplyr::summarise(dplyr::n())
具体实现
只需要将summarise()中的计数逻辑替换为对死亡人数字段的求和逻辑即可,注意提前替换代码中死亡人数字段的列名为你数据集里的实际列名,示例假设死亡人数字段名为deaths:
library(dplyr) result <- data_mali %>% group_by(admin1, year) %>% summarise( total_deaths = sum(deaths, na.rm = TRUE), .groups = "drop" )
注意事项
total_deaths是汇总后累计死亡人数列的列名,可根据你的命名习惯自行修改na.rm = TRUE的作用是自动忽略死亡人数字段中的缺失值,避免存在缺失值时整组求和结果返回NA,可根据数据实际质量决定是否保留该参数.groups = "drop"用于汇总完成后自动清除数据的分组状态,避免后续操作受残留分组逻辑影响出现计算错误- 运行完成后可通过
table(result$admin1)快速校验结果:正常情况下每个区域对应6条记录,如果出现记录数不足6的情况,说明该区域在缺失的年份无任何冲突事件上报,不属于代码运行错误。
内容的提问来源于stack exchange,提问作者Lena Stefan
相关产品推荐
相关产品推荐

