使用dplyr分组计算年龄组与伤害机制死亡率报错求助
解决按年龄组+伤害死亡机制分组计算死亡率的报错问题
问题背景
需要为现有data.frame新增死亡率计算列,要求按5个年龄组、10种伤害死亡机制分别计算对应分组的死亡率,公式为:(死亡数/人口数)*1000*100。
目前遇到的问题:
- 使用
group_by(Injury.mechanism)后调用mutate,提示AgeGrp.DRate长度需为216或1而非2376,出现长度不匹配错误 - 部分代码中
mutate未生效,仅filter操作起作用 - 现有尝试是为每个年龄组单独编写代码,用
grepl过滤年龄组后按伤害机制分组计算,但触发上述错误
错误原因
- 分组维度缺失:只按
Injury.mechanism分组,未纳入AgeGrp,导致计算出的是每个伤害机制的整体死亡率,而非分年龄组的死亡率,结果长度与原数据行不匹配。 - 冗余的分年龄处理:用
grepl逐个过滤年龄组再处理,不仅代码冗余,还容易出现数据覆盖、合并错误,导致mutate的结果未正确保存到原数据框。
解决方案
直接通过同时按年龄组和伤害死亡机制分组,一次性完成所有分组的死亡率计算,无需单独处理每个年龄组。
基础场景(每个分组已对应死亡数和人口数)
假设你的数据框df包含列:AgeGrp(年龄组)、Injury.mechanism(伤害死亡机制)、deaths(该分组死亡数)、population(该分组人口数),代码如下:
library(dplyr) # 同时按年龄组+伤害机制分组,计算死亡率并保留原数据结构 df <- df %>% group_by(AgeGrp, Injury.mechanism) %>% mutate(AgeGrp.DRate = (deaths / population) * 1000 * 100) %>% ungroup() # 可选,取消分组状态,避免后续操作受分组影响
进阶场景(原始数据为单条死亡记录,需先汇总)
如果你的原始数据每行是一条死亡记录,需要先统计每个分组的死亡数,并关联对应人口数,代码调整为:
library(dplyr) # 先分组汇总死亡数,关联人口数后计算死亡率 df <- df %>% group_by(AgeGrp, Injury.mechanism) %>% summarise( total_deaths = n(), # 统计每个分组的死亡总条数 total_pop = unique(population) # 假设每个分组的人口数唯一,需确保数据正确性 ) %>% mutate(AgeGrp.DRate = (total_deaths / total_pop) * 1000 * 100) %>% ungroup()
注意事项
- 确认
AgeGrp的分组标签统一(如无拼写错误、无重复分组),确保5个年龄组都被正确识别 - 验证
population列的数值是对应分组的人口数,而非整体人口,避免计算出错误的死亡率 - 建议直接基于原始数据进行分组计算,减少中间过滤步骤,降低出错概率
内容的提问来源于stack exchange,提问作者Data Science Analytics Manager
相关产品推荐
相关产品推荐

