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

R语言中如何按区域分组统计dataframe的ID总和及伤亡汇总数据

报错原因

  • 执行group_by+ summarise操作后,dplyr默认仅保留分组字段和summarise内显式计算生成的字段,你没有在summarise中处理ID字段,执行完summarise后ID就被丢弃了,后续mutate调用自然找不到该对象。
  • 你计算事故数的逻辑有误:sum(ID)是对ID字段的值求和,不是统计事故数量,要统计每个分组的事故行数应该用n(),如果存在单起事故对应多条重复ID的情况,用n_distinct(ID)统计唯一事故数更稳妥。
  • 原有代码还存在语法问题:across(Population)所在行缺少右括号,属于语法错误。

修正后代码

如果你的ID是唯一值,每一行对应一起独立事故,用以下代码即可:

library(dplyr)
crashes_stats_TA <- crashes_TA %>% 
  group_by(TA_code, TA_name) %>%
  summarise(
    # 所有带count的字段求和
    across(contains("count"), ~sum(., na.rm = TRUE)),
    # 人口和百分比字段求均值,不需要的话可以删除这两行
    across(Population, ~mean(., na.rm = TRUE)),
    across(contains("perc"), ~mean(., na.rm = TRUE), .names = "{.col}_mean"),
    # 直接统计事故数量
    crashes = n()
  ) %>%
  # 计算总伤亡人数
  mutate(casualties = fatal_count + serious_injury_count + minor_injury_count)

如果ID存在重复,把crashes = n()替换为crashes = n_distinct(ID, na.rm = TRUE)即可。

代码说明

  • 所有统计计算都放在summarise内完成,避免后续mutate找不到字段的问题
  • 伤亡人数计算不需要加round,因为人数本身就是整数,求和结果也为整数
  • 如果不需要Population、perc相关的统计字段,直接删除对应的across行即可,不影响核心字段的计算结果

内容的提问来源于stack exchange,提问作者scumbagsurfer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:18:02