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

基于R语言的空间信息聚合:国家转大洲级数据聚合需求

实现国家到大洲的数据聚合与层级切换

1. 数据聚合(从国家到大洲)

从你已合并好的sp对象(假设名为merged_sp)中提取内嵌数据框,用dplyr按大洲分组聚合。以下示例以求和为例,你可根据需求替换为均值、中位数等统计方式,同时处理NA值:

library(dplyr)

# 从sp对象提取数据并聚合
continent_agg_data <- merged_sp@data %>%
  group_by(大洲) %>% # 注意匹配你实际的大洲字段名,比如英文"continent"
  summarise(
    Value1 = sum(Value1, na.rm = TRUE),
    Value2 = sum(Value2, na.rm = TRUE),
    Value3 = sum(Value3, na.rm = TRUE),
    Value4 = sum(Value4, na.rm = TRUE),
    country_count = n_distinct(Country, na.rm = TRUE) # 可选:统计大洲内有效国家数
  ) %>%
  ungroup()

如果你的countryValueData已关联大洲信息,也可直接基于该数据框聚合:

continent_agg_data <- countryValueData %>%
  left_join(merged_sp@data %>% select(Country, 大洲), by = "Country") %>%
  group_by(大洲) %>%
  summarise(
    Value1 = sum(Value1, na.rm = TRUE),
    Value2 = sum(Value2, na.rm = TRUE),
    Value3 = sum(Value3, na.rm = TRUE),
    Value4 = sum(Value4, na.rm = TRUE)
  ) %>%
  ungroup()

2. 构建大洲级空间对象(如需绘制带边界的气泡图)

若原shapefile无大洲级边界,可将国家级sp对象按大洲合并:

library(sp)

# 按大洲合并空间多边形
continent_sp <- unionSpatialPolygons(merged_sp, IDs = merged_sp@data$大洲)

# 将聚合数据关联到大洲空间对象
continent_sp@data <- continent_agg_data %>%
  right_join(data.frame(大洲 = names(continent_sp)), by = "大洲")

3. 实现气泡图层级切换

以tmap为例,通过图层分组实现交互切换:

library(tmap)

# 国家层级气泡图
map_country <- tm_shape(merged_sp) +
  tm_bubbles(size = "Value1", col = "Value1", popup.vars = c("Country", "Value1", "Value2")) +
  tm_layout(title = "国家层级数据")

# 大洲层级气泡图
map_continent <- tm_shape(continent_sp) +
  tm_bubbles(size = "Value1", col = "Value1", popup.vars = c("大洲", "Value1", "country_count")) +
  tm_layout(title = "大洲层级数据")

# 开启交互模式并添加切换控件
tmap_mode("view")
tm_add_layer(map_country, group = "国家层级") +
  tm_add_layer(map_continent, group = "大洲层级") +
  tm_view(control.pos = "topright", legend.pos = "bottomright")

若使用leaflet,可通过addLayersControl实现切换:

library(leaflet)

# 构建切换地图
leaflet() %>%
  addTiles() %>%
  addLayersControl(
    baseGroups = c("国家层级", "大洲层级"),
    options = layersControlOptions(collapsed = FALSE)
  ) %>%
  # 添加国家层级气泡
  addCircleMarkers(
    data = merged_sp,
    radius = ~sqrt(Value1)*2, # 调整气泡缩放比例
    color = ~colorNumeric("viridis", Value1)(Value1),
    popup = ~paste("<b>", Country, "</b><br>Value1:", Value1, "<br>Value2:", Value2),
    group = "国家层级"
  ) %>%
  # 添加大洲层级气泡
  addCircleMarkers(
    data = continent_sp,
    radius = ~sqrt(Value1)*3,
    color = ~colorNumeric("viridis", Value1)(Value1),
    popup = ~paste("<b>", 大洲, "</b><br>Value1总和:", Value1, "<br>国家数量:", country_count),
    group = "大洲层级"
  )

关键注意事项

  • 确保大洲字段名在所有数据集中统一,避免匹配错误。
  • 聚合逻辑需贴合业务需求:总量用sum、平均水平用mean,务必保留na.rm = TRUE处理缺失值。
  • 气泡大小的缩放比例需根据数据范围调整,避免气泡过大或过小影响可视化效果。

内容的提问来源于stack exchange,提问作者Mr.CR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 18:05:27