Как мне найти все переписные участки США в месте в 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. Я понимаю, что это не ответ, но у меня недостаточно репутации для комментариев, и хотя это было уместно, хотя сообщение немного устарело (просто наткнулся на него).

Другие вопросы по тегам