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

R语言基于两个数据框聚合取值计算疫情率并绘制分级统计图

解决办法

1. 数据关联与指标计算

你需要先汇总clean_df的月度街道级病例、死亡数据,再关联indo_filter_3的人口和空间几何数据,再计算目标指标,示例代码如下:

library(dplyr)
library(tmap)
library(sf)

# 汇总+关联+计算指标
stat_df <- clean_df %>%
  # 按省/市/区/街道/月份分组,避免同名街道匹配错误
  group_by(Province, City, District, Sub_District, Month) %>%
  summarise(
    total_cases = sum(as.numeric(Cases), na.rm = TRUE),
    total_death = sum(as.numeric(Death), na.rm = TRUE),
    .groups = "drop"
  ) %>%
  # 关联空间表的人口、几何数据
  left_join(
    indo_filter_3 %>% select(Province, City, District, Sub_District, Total_Population),
    by = c("Province", "City", "District", "Sub_District")
  ) %>%
  # 计算每万人口的累计确诊率、死亡率
  mutate(
    cases_per_10k = total_cases / Total_Population * 10000,
    death_per_10k = total_death / Total_Population * 10000
  ) %>%
  # 转为sf空间对象,保留几何属性
  st_sf(sf_column_name = "Geometry")

2. 绘制分级统计地图

如果需要按月份分开展示,可以直接用tmap的分面功能实现:

tmap_mode("plot")

# 绘制每万人口累计确诊率月度地图
tm_shape(stat_df) +
  tm_fill(
    col = "cases_per_10k",
    title = "每万人口累计确诊数",
    style = "quantile", # 可调整分箱规则,如kmeans、jenks等
    n = 5
  ) +
  tm_borders(alpha = 0.5) +
  tm_facets(by = "Month", nrow = 2) + # 按月份分面,可调整行列数
  tm_layout(legend.position = c("left", "bottom"))

# 如需绘制死亡率,将tm_fill的col参数改为death_per_10k即可

注意事项

  • 若存在匹配不上人口数据的街道,会生成NA值,可加filter(!is.na(Total_Population))过滤无效记录
  • 若indo_filter_3的人口是村级粒度,需要先按街道分组汇总得到街道总人口,再做后续关联计算
  • 月份数量较多时可调整tm_facets的nrow、ncol参数优化布局

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:30:01