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

如何用Tidycensus获取特定城市的小地理单元(tract、Block Group)数据?

解决Tidycensus获取特定城市小地理单元数据的问题

方案1:通过城市行政边界筛选(精准匹配城市范围)

这个方法先获取城市的行政边界,再用空间筛选把落在边界内的tract/block group挑出来,适合需要严格城市范围的场景。

  1. 加载所需包
library(tidycensus)
library(tigris)
library(sf)
  1. 获取目标城市的行政边界
    以迈阿密市为例,用tigris::places()函数获取佛罗里达州的城市边界,再筛选出迈阿密:
# 获取佛罗里达州所有城市边界
fl_places <- places(state = "FL", year = 2020, class = "sf")
# 筛选迈阿密市
miami_city <- fl_places[fl_places$NAME == "Miami", ]
  1. 获取目标县的tract数据(先缩小范围到城市所在的县,减少数据量)
miami_tracts <- get_decennial(
  geography = "tract",
  variables = "P2_001N",
  state = "FL",
  county = "Miami-Dade", # 迈阿密市主要在这个县,无需覆盖三个县
  geometry = TRUE,
  year = 2020
)
  1. 空间筛选:保留落在迈阿密市边界内的tract
    用sf::st_filter()筛选与城市边界相交的tract(如果要严格保留完全在边界内的单元,把predicate改成st_within):
miami_city_tracts <- st_filter(miami_tracts, miami_city, predicate = st_intersects)

方案2:用Census Urban Areas筛选(宽松范围,适合无需精确行政边界的场景)

如果你接受Urban Areas的范围(比城市行政范围稍大,包含周边建成区),可以直接获取Urban Areas边界后筛选:

  1. 获取迈阿密对应的Urban Area边界
urban_areas <- get_decennial(
  geography = "urban area",
  variables = "P2_001N",
  year = 2020,
  geometry = TRUE
)
# 筛选迈阿密的Urban Area
miami_urban <- urban_areas[urban_areas$NAME == "Miami-Fort Lauderdale-Pompano Beach, FL Urban Area", ]
  1. 获取目标区域的tract数据(覆盖Urban Area涉及的县)
fl_tracts <- get_decennial(
  geography = "tract",
  variables = "P2_001N",
  state = "FL",
  county = c("Miami-Dade", "Broward", "Palm Beach"),
  geometry = TRUE,
  year = 2020
)
  1. 空间筛选Urban Area内的tract
miami_urban_tracts <- st_filter(fl_tracts, miami_urban, predicate = st_intersects)

注意事项

  • 运行前确保已设置Census API密钥:census_api_key("你的密钥", install = TRUE),密钥可在Census官网免费申请。
  • 空间筛选的predicate参数可按需调整:st_intersects(只要有交集就算)、st_within(完全在边界内)、st_contains(边界包含单元)。
  • 若要获取Block Group数据,只需把geography参数改成"block group",逻辑完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 22:36:31