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

R语言dplyr合并数据报Join columns must be present in data错误如何解决

问题解决方案

错误原因

报错是因为第二次左连接时,Jakarta_Death表中不存在Sub_District列,找不到关联键。触发问题的根源在summarise步骤:
你计算死亡率时直接使用了Total_Population列,这个列属于DKI_Jakarta表,每个街道对应唯一的固定人口值,但你既没有将它纳入分组,也没有用聚合函数包裹,dplyr执行summarise时会自动丢弃非分组、非聚合的列,甚至会破坏原有分组结构,导致分组键Sub_District被丢失。
另外你的代码存在多余操作:第一次inner_join已经将DKI_Jakarta的所有列(包括你需要的Geometry地理列)合并到了数据中,完全不需要第二次执行左连接,多写一次连接反而增加了出错概率。

最优修正方案(省去多余连接,直接保留地理列)

直接在分组时加入Geometry和Total_Population即可,二者都是每个街道唯一的固定值,不会影响聚合逻辑,聚合后直接保留地理列供后续绘图使用:

Jakarta_Death <- Covid_DF %>%
  inner_join(DKI_Jakarta, by = c("Sub_District" = "Sub_District")) %>%
  group_by(Sub_District, Month, Geometry, Total_Population) %>%
  summarise(
    `Covid Death Per 10,000 Population` = (sum(Death)/Total_Population)*10000,
    .groups = "drop"
  )

兼容原有代码结构的修正方案

如果你一定要保留原有两次连接的写法,只需要在分组时加入Total_Population,保证summarise执行后Sub_District列仍然保留即可:

Jakarta_Death <- Covid_DF %>%
  inner_join(DKI_Jakarta, by=c("Sub_District"="Sub_District")) %>%
  group_by(Sub_District, Month, Total_Population) %>%
  summarise(
    `Covid Death Per 10,000 Population` = (sum(Death)/Total_Population)*10000,
    .groups = "drop"
  )

Jakarta_Death  <- Jakarta_Death %>% 
  left_join(DKI_Jakarta, by=c("Sub_District"="Sub_District"))

验证排查

如果修改后仍然报错,可以依次执行以下命令排查列名拼写问题:

  • colnames(Jakarta_Death) 确认聚合后的表中存在Sub_District列
  • colnames(DKI_Jakarta) 确认关联表的Sub_District列名没有大小写、空格类的拼写错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:45:03