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

R绘制新冠空间箱型地图时st_geometry赋值报错求助

报错原因

该报错的本质是st_as_sf()转换时,未识别到数据框中存在合法的sfc类型几何列,导致无法生成sf空间数据框,你的问题出在数据合并和统计的逻辑上:

  • 第一次inner_join后做dplyr::summarise时,仅保留了分组列Sub_District、Date和新生成的统计列,原始的几何列直接被丢弃
  • 第二次left_join按Sub_District关联时,DKI_Jakarta是村级粒度数据,一个街道对应多条村级记录,会出现一对多匹配,导致几何列格式错乱
  • 注意你的DKI_Jakarta几何列名拼写为Gemoetry(拼写错误,应为Geometry),也可能导致列识别异常

解决步骤

  1. 先预处理空间数据,转换为合法sf格式,聚合得到街道级别的几何和总人口,避免后续一对多匹配
# 修正几何列拼写错误
colnames(DKI_Jakarta)[colnames(DKI_Jakarta) == "Gemoetry"] <- "Geometry"
# 转换为sf空间数据框
DKI_Jakarta <- st_as_sf(DKI_Jakarta)
# 按街道聚合,得到街道级总人口和合并后的几何
Jakarta_subdistrict <- DKI_Jakarta %>%
  group_by(Sub_District) %>%
  summarise(
    Total_Population = sum(Total_Population, na.rm = TRUE),
    Geometry = st_union(Geometry)
  ) %>%
  ungroup()
  1. 重新合并疫情数据和空间数据,统计时保留几何列
Jakarta_Covid_Cases <- Covid_DF %>%
  inner_join(Jakarta_subdistrict, by = "Sub_District") %>%
  # 将总人口、几何列加入分组,避免summarise时被丢弃
  group_by(Sub_District, Date, Total_Population, Geometry) %>%
  dplyr::summarise(
    `Covid Cases Per 10k Population` = sum(Cases, na.rm = TRUE) / (Total_Population / 10000)
  ) %>%
  ungroup() %>%
  st_as_sf() # 此时转换sf不会报错
  1. 验证sf对象合法性
# 执行后返回 sfc_*、sfc 前缀的结果即为正常
class(st_geometry(Jakarta_Covid_Cases))
  1. 重新调用箱型地图函数即可正常出图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:42:02