Как мне найти все переписные участки США в месте в R?
Есть несколько R
пакеты, облегчающие работу с данными переписи населения США. Два, которые я использую чаще всего, tigris
(для загрузки пространственных данных) и 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 для всех трактатов Сиэтла.
Для справки, я знаю, что эту информацию можно определить в другом месте. Эта страница в FAQ Census.gov дает четкие инструкции о том, как определить все участки в данном месте переписи. Но, учитывая, что это важный шаг во многих связанных с переписью анализах, было бы лучше, если бы был удобный способ сделать это из R
консоль
Заранее спасибо.
редактировать
Хотя этот вопрос касается пространственных данных, меня больше всего интересует поиск непространственного решения. Например, я бы предпочел решение, которое запрашивает API-интерфейс Census и возвращает вектор вершин требуемых GEOID в решение, которое использует инструмент пространственного анализа (например, rgeos::intersects
) создать вектор. Зачем? Поскольку пространственные подходы просто более подвержены ошибкам в этом процессе, и это известная информация, о которой мы говорим, а не то, что нужно выводить пространственно.
4 ответа
Мне часто нужны такие же данные, поэтому я написал пакет R для этой работы. Этот пакет называется totalcensus
, Вы можете найти его здесь https://github.com/GL-Li/totalcensus.
С помощью этого пакета вы можете очень легко получить данные на участке, группе блоков или на уровне блоков городов, городов, округов, районов метро и всех других географических областей. Например, если вы хотите получить данные о гонке на уровне группы блоков различных областей из пятилетнего опроса ACS 2011-2015, просто запустите код, как показано ниже:
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"
)
Он возвращает данные как:
# 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
С помощью 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, но есть отличный инструмент для решения именно этой проблемы: приложение Geocorr Центра данных переписи населения Университета Миссури . Вы можете выбрать место переписи в качестве исходной географии и блок переписи в качестве целевой географии, и приложение сгенерирует аккуратный CSV-файл со списком корреляции, показывающим все блоки переписи в каждом месте переписи.
Просто имейте в виду, что участки пересекают границы Места. Блоки и группы блоков (я думаю) находятся только в одном Месте. Итак, если вы выполняете запросы о населении и используете трактаты, вы можете получить подсчеты, которые включают подсчеты от нескольких объектов Place. Я понимаю, что это не ответ, но у меня недостаточно репутации для комментариев, и хотя это было уместно, хотя сообщение немного устарело (просто наткнулся на него).