我如何在 R 中的一个地方找到所有美国人口普查区?
How do I find all the US Census Tracts in a Place in R?
有几个 R
包可以更轻松地处理美国人口普查数据。我最常使用的两个是 tigris
(for loading the spatial data) and acs
(用于加载表格数据)。
但是,我 运行 遇到的一个问题是我无法找到一种有效、可靠的方法来确定一个地方内的所有区域(或街区组、邮政编码等)无需离开 R
控制台。
例如,如果我想使用西雅图的人口普查区块数据,我会首先使用 tigris::tracts
下载华盛顿州金县的空间数据:
library(tigris)
tr <- tigris::tracts(state = "WA", county = "King")
但不幸的是,没有明显的方法可以将这些数据子集化以仅包括西雅图的区域。
glimpse(tr)
Observations: 398
Variables: 12
$ STATEFP (chr) "53", "53", "53", "53", "53", "53", "53", ...
$ COUNTYFP (chr) "033", "033", "033", "033", "033", "033", ...
$ TRACTCE (chr) "003800", "021500", "032704", "026200", "0...
$ GEOID (chr) "53033003800", "53033021500", "53033032704...
$ NAME (chr) "38", "215", "327.04", "262", "327.03", "3...
$ NAMELSAD (chr) "Census Tract 38", "Census Tract 215", "Ce...
$ MTFCC (chr) "G5020", "G5020", "G5020", "G5020", "G5020...
$ FUNCSTAT (chr) "S", "S", "S", "S", "S", "S", "S", "S", "S...
$ ALAND (dbl) 624606, 3485578, 17160645, 15242622, 10319...
$ AWATER (dbl) 0, 412526, 447367, 526886, 175464, 0, 4360...
$ INTPTLAT (chr) "+47.6794093", "+47.7643848", "+47.4940877...
$ INTPTLON (chr) "-122.2955292", "-122.2737863", "-121.7717...
同样,acs
包允许用户使用 geo.make
函数创建人口普查数据的子集,但在我的示例中,如果我还没有列表,这对我没有帮助所有西雅图区域的区域 GEOID。
郑重声明,我知道可以在别处确定此信息。 Census.gov 常见问题解答中的 page 提供了有关如何确定给定人口普查地点中所有区域的明确说明。但鉴于这是许多与人口普查相关的分析中的关键步骤,如果有一种方便的方法从R
控制台.
提前致谢。
编辑
虽然这个问题涉及空间数据,我最感兴趣的是寻找非空间解决方案。例如,我更喜欢查询人口普查的解决方案API 和 returns returns 所需 GEOID 的矢量到使用空间分析工具(例如,rgeos::intersects
)创建矢量的解决方案。为什么?因为空间方法在此过程中更容易出错,而这是我们正在谈论的已知信息,而不是需要从空间上推断的信息。
使用 ggmaps
包,我们可以使用数据中的 lat/long 点进行反向地理编码以获取信息。这将创建一个向量,其中包含来自所有数据点的城市名称。
city <- vector(mode = "character", length=nrow(tr@data))
for (i in 1:nrow(tr@data))
city[i] <- strsplit(revgeocode(c(as.numeric(tr@data[i,12]),
as.numeric(tr@data[i,11]))), ", ")[[1]][2]
head(city)
[1] "Seattle" "Lake Forest Park" "North Bend" "Tukwila"
"Snoqualmie" "Woodinville"
我经常需要相同类型的数据,所以我写了一个 R 包来完成这项工作。这个包叫做 totalcensus
。你可以在这里找到它 https://github.com/GL-Li/totalcensus。
使用此软件包,您可以非常轻松地获取城镇、城市、县、都市区和所有其他地理区域的区域、街区组或街区级别的数据。例如,如果要从 2011-2015 ACS 5 年调查中获取各个区域的块组级别的比赛数据,只需 运行 代码如下:
mixed <- read_acs5year(
year = 2015,
states = c("ut", "ri"),
table_contents = c(
"white = B02001_002",
"black = B02001_003",
"asian = B02001_005"
),
areas = c(
"Lincoln town, RI",
"Salt Lake City city, UT",
"Salt Lake City metro",
"Kent county, RI",
"COUNTY = UT001",
"PLACE = UT62360"
),
summary_level = "block group"
)
它returns数据如:
# area GEOID lon lat state population white black asian GEOCOMP SUMLEV NAME
# 1: Lincoln town, RI 15000US440070115001 -71.46686 41.94419 RI 1561 1386 128 47 all 150 Block Group 1, Census Tract 115, Providence County, Rhode Island
# 2: Lincoln town, RI 15000US440070115002 -71.47159 41.96754 RI 916 806 97 0 all 150 Block Group 2, Census Tract 115, Providence County, Rhode Island
# 3: Lincoln town, RI 15000US440070115003 -71.47820 41.96364 RI 2622 2373 77 86 all 150 Block Group 3, Census Tract 115, Providence County, Rhode Island
# 4: Lincoln town, RI 15000US440070115004 -71.47830 41.97346 RI 1605 1516 43 0 all 150 Block Group 4, Census Tract 115, Providence County, Rhode Island
# 5: Lincoln town, RI 15000US440070116001 -71.44665 41.93120 RI 948 764 0 0 all 150 Block Group 1, Census Tract 116, Providence County, Rhode Island
# ---
# 1129: Providence city, UT 15000US490050012011 -111.82424 41.69198 UT 2018 1877 0 0 all 150 Block Group 1, Census Tract 12.01, Cache County, Utah
# 1130: Providence city, UT 15000US490050012012 -111.80736 41.69323 UT 1486 1471 0 0 all 150 Block Group 2, Census Tract 12.01, Cache County, Utah
# 1131: Providence city, UT 15000US490050012013 -111.81310 41.65837 UT 1563 1440 15 0 all 150 Block Group 3, Census Tract 12.01, Cache County, Utah
# 1132: Providence city, UT 15000US490050012022 -111.85231 41.68674 UT 3894 3594 0 0 all 150 Block Group 2, Census Tract 12.02, Cache County, Utah
# 1133: Providence city, UT 15000US490059801001 -111.64525 41.67498 UT 118 118 0 0 all 150 Block Group 1, Census Tract 9801, Cache County, Utah
有几个 R
包可以更轻松地处理美国人口普查数据。我最常使用的两个是 tigris
(for loading the spatial data) and acs
(用于加载表格数据)。
但是,我 运行 遇到的一个问题是我无法找到一种有效、可靠的方法来确定一个地方内的所有区域(或街区组、邮政编码等)无需离开 R
控制台。
例如,如果我想使用西雅图的人口普查区块数据,我会首先使用 tigris::tracts
下载华盛顿州金县的空间数据:
library(tigris)
tr <- tigris::tracts(state = "WA", county = "King")
但不幸的是,没有明显的方法可以将这些数据子集化以仅包括西雅图的区域。
glimpse(tr)
Observations: 398
Variables: 12
$ STATEFP (chr) "53", "53", "53", "53", "53", "53", "53", ...
$ COUNTYFP (chr) "033", "033", "033", "033", "033", "033", ...
$ TRACTCE (chr) "003800", "021500", "032704", "026200", "0...
$ GEOID (chr) "53033003800", "53033021500", "53033032704...
$ NAME (chr) "38", "215", "327.04", "262", "327.03", "3...
$ NAMELSAD (chr) "Census Tract 38", "Census Tract 215", "Ce...
$ MTFCC (chr) "G5020", "G5020", "G5020", "G5020", "G5020...
$ FUNCSTAT (chr) "S", "S", "S", "S", "S", "S", "S", "S", "S...
$ ALAND (dbl) 624606, 3485578, 17160645, 15242622, 10319...
$ AWATER (dbl) 0, 412526, 447367, 526886, 175464, 0, 4360...
$ INTPTLAT (chr) "+47.6794093", "+47.7643848", "+47.4940877...
$ INTPTLON (chr) "-122.2955292", "-122.2737863", "-121.7717...
同样,acs
包允许用户使用 geo.make
函数创建人口普查数据的子集,但在我的示例中,如果我还没有列表,这对我没有帮助所有西雅图区域的区域 GEOID。
郑重声明,我知道可以在别处确定此信息。 Census.gov 常见问题解答中的 page 提供了有关如何确定给定人口普查地点中所有区域的明确说明。但鉴于这是许多与人口普查相关的分析中的关键步骤,如果有一种方便的方法从R
控制台.
提前致谢。
编辑
虽然这个问题涉及空间数据,我最感兴趣的是寻找非空间解决方案。例如,我更喜欢查询人口普查的解决方案API 和 returns returns 所需 GEOID 的矢量到使用空间分析工具(例如,rgeos::intersects
)创建矢量的解决方案。为什么?因为空间方法在此过程中更容易出错,而这是我们正在谈论的已知信息,而不是需要从空间上推断的信息。
使用 ggmaps
包,我们可以使用数据中的 lat/long 点进行反向地理编码以获取信息。这将创建一个向量,其中包含来自所有数据点的城市名称。
city <- vector(mode = "character", length=nrow(tr@data))
for (i in 1:nrow(tr@data))
city[i] <- strsplit(revgeocode(c(as.numeric(tr@data[i,12]),
as.numeric(tr@data[i,11]))), ", ")[[1]][2]
head(city)
[1] "Seattle" "Lake Forest Park" "North Bend" "Tukwila"
"Snoqualmie" "Woodinville"
我经常需要相同类型的数据,所以我写了一个 R 包来完成这项工作。这个包叫做 totalcensus
。你可以在这里找到它 https://github.com/GL-Li/totalcensus。
使用此软件包,您可以非常轻松地获取城镇、城市、县、都市区和所有其他地理区域的区域、街区组或街区级别的数据。例如,如果要从 2011-2015 ACS 5 年调查中获取各个区域的块组级别的比赛数据,只需 运行 代码如下:
mixed <- read_acs5year(
year = 2015,
states = c("ut", "ri"),
table_contents = c(
"white = B02001_002",
"black = B02001_003",
"asian = B02001_005"
),
areas = c(
"Lincoln town, RI",
"Salt Lake City city, UT",
"Salt Lake City metro",
"Kent county, RI",
"COUNTY = UT001",
"PLACE = UT62360"
),
summary_level = "block group"
)
它returns数据如:
# area GEOID lon lat state population white black asian GEOCOMP SUMLEV NAME
# 1: Lincoln town, RI 15000US440070115001 -71.46686 41.94419 RI 1561 1386 128 47 all 150 Block Group 1, Census Tract 115, Providence County, Rhode Island
# 2: Lincoln town, RI 15000US440070115002 -71.47159 41.96754 RI 916 806 97 0 all 150 Block Group 2, Census Tract 115, Providence County, Rhode Island
# 3: Lincoln town, RI 15000US440070115003 -71.47820 41.96364 RI 2622 2373 77 86 all 150 Block Group 3, Census Tract 115, Providence County, Rhode Island
# 4: Lincoln town, RI 15000US440070115004 -71.47830 41.97346 RI 1605 1516 43 0 all 150 Block Group 4, Census Tract 115, Providence County, Rhode Island
# 5: Lincoln town, RI 15000US440070116001 -71.44665 41.93120 RI 948 764 0 0 all 150 Block Group 1, Census Tract 116, Providence County, Rhode Island
# ---
# 1129: Providence city, UT 15000US490050012011 -111.82424 41.69198 UT 2018 1877 0 0 all 150 Block Group 1, Census Tract 12.01, Cache County, Utah
# 1130: Providence city, UT 15000US490050012012 -111.80736 41.69323 UT 1486 1471 0 0 all 150 Block Group 2, Census Tract 12.01, Cache County, Utah
# 1131: Providence city, UT 15000US490050012013 -111.81310 41.65837 UT 1563 1440 15 0 all 150 Block Group 3, Census Tract 12.01, Cache County, Utah
# 1132: Providence city, UT 15000US490050012022 -111.85231 41.68674 UT 3894 3594 0 0 all 150 Block Group 2, Census Tract 12.02, Cache County, Utah
# 1133: Providence city, UT 15000US490059801001 -111.64525 41.67498 UT 118 118 0 0 all 150 Block Group 1, Census Tract 9801, Cache County, Utah