You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用dplyr分组计算年龄组与伤害机制死亡率报错求助

解决按年龄组+伤害死亡机制分组计算死亡率的报错问题

问题背景

需要为现有data.frame新增死亡率计算列,要求按5个年龄组、10种伤害死亡机制分别计算对应分组的死亡率,公式为:(死亡数/人口数)*1000*100。

目前遇到的问题:

  • 使用group_by(Injury.mechanism)后调用mutate,提示AgeGrp.DRate长度需为216或1而非2376,出现长度不匹配错误
  • 部分代码中mutate未生效,仅filter操作起作用
  • 现有尝试是为每个年龄组单独编写代码,用grepl过滤年龄组后按伤害机制分组计算,但触发上述错误

错误原因

  1. 分组维度缺失:只按Injury.mechanism分组,未纳入AgeGrp,导致计算出的是每个伤害机制的整体死亡率,而非分年龄组的死亡率,结果长度与原数据行不匹配。
  2. 冗余的分年龄处理:用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 18:42:32