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
相关产品推荐
相关产品推荐

