r tidycensus 下载所有块组

r tidycensus download all block groups

我希望使用 tidycensus 软件包自动执行从美国所有区块组下载人口普查数据的过程。开发人员指示下载 US, however, block groups cannot be accessed using the same method 内的所有传单。

这是我当前无法使用的代码

library(tidyverse)
library(tidycensus)
census_api_key("key here")

# create lists of state and county codes

data("fips_codes")
temp <- data.frame(state = as.character(fips_codes$state_code),
                   county = fips_codes$county_code,
                   stringsAsFactors = F)
temp <- aggregate(county~state, temp, c)
state <- temp$state
coun <- temp$county

# use map2_df to loop through the files, similar to the "tract" data pull

home <- map2_df(state, coun, function(x,y) {
get_acs(geography = "block group", variables = "B25038_001", #random var
state = x,county = y)
  })

产生的错误是

No encoding supplied: defaulting to UTF-8.
Error: parse error: premature EOF

                     (right here) ------^

将每个州内的县转换为列表的类似方法也不起作用

temp <- aggregate(county~state, temp, c)
state <- temp$state
coun <- temp$county

df<- map2_df(state, coun, function(x,y) {
    get_acs(geography = "block group", variables = "B25038_001", 
            state = x,county = y)
  })

Error: Result 1 is not a length 1 atomic vector 返回。

有没有人知道这是如何完成的?很可能我没有正确使用函数或语法,而且我也不太擅长循环。任何帮助将不胜感激。

解决方案由tidycensus作者(Kyle Walker)提供,如下:

Unfortunately this just doesn't work at the moment. If it did work, your code would need to identify the counties within each state within a function evaluated by map_df and then stitch together the dataset county-by-county, and state-by-state. The issue is that block group data is only available by county, so you'd need to walk through all 3000+ counties in the US in turn. If it did work, a successful call would look like this:

library(tigris)
library(tidyverse)
library(tidycensus)
library(sf)

ctys <- counties(cb = TRUE)

state_codes <- unique(fips_codes$state_code)[1:51]

bgs <- map_df(state_codes, function(state_code) {
  state <- filter(ctys, STATEFP == state_code)
  county_codes <- state$COUNTYFP
  get_acs(geography = "block group", variables = "B25038_001",
          state = state_code, county = county_codes)
})

The issue is that while I have internal logic to allow for multi-state calls, or multi-county calls within a state, tidycensus can't yet handle multi-state and multi-county calls simultaneously.

试试这个包:totalcensus https://github.com/GL-Li/totalcensus。它将人口普查数据文件下载到您自己的计算机上,并从这些文件中提取任何数据。设置文件夹和路径后,运行如果你想要2015 ACS 5年调查中的所有块组数据,请使用下面的代码。

library(totalcensus)

# download the 2015 ACS 5-year survey data, which is about 50 GB.
download_census("acs5year", 2015)

# read block group data of variable B25038_001 from all states plus DC
block_groups <- read_acs5year(
    year = 2015,
    states = states_DC,
    table_contents = "B25038_001",
    summary_level = "block group"
)

所有状态和DC的217739个块组的提取数据:

    #                       GEOID       lon      lat state population B25038_001 GEOCOMP SUMLEV                                                              NAME
    #      1: 15000US020130001001 -164.1232 54.80448    AK        982         91     all    150     Block Group 1, Census Tract 1, Aleutians East Borough, Alaska
    #      2: 15000US020130001002 -161.1786 55.60224    AK       1116        247     all    150     Block Group 2, Census Tract 1, Aleutians East Borough, Alaska
    #      3: 15000US020130001003 -160.0655 55.13399    AK       1206        352     all    150     Block Group 3, Census Tract 1, Aleutians East Borough, Alaska
    #      4: 15000US020160001001  178.3388 51.95945    AK       1065        264     all    150 Block Group 1, Census Tract 1, Aleutians West Census Area, Alaska
    #      5: 15000US020160002001 -166.8899 53.85881    AK       2038        380     all    150 Block Group 1, Census Tract 2, Aleutians West Census Area, Alaska
    # ---                                                                                                                                                    
    # 217735: 15000US560459511001 -104.7889 43.99520    WY       1392        651     all    150          Block Group 1, Census Tract 9511, Weston County, Wyoming
    # 217736: 15000US560459511002 -104.4785 43.76853    WY       2050        742     all    150          Block Group 2, Census Tract 9511, Weston County, Wyoming
    # 217737: 15000US560459513001 -104.2575 43.88160    WY       1291        520     all    150          Block Group 1, Census Tract 9513, Weston County, Wyoming
    # 217738: 15000US560459513002 -104.1807 43.85406    WY       1046        526     all    150          Block Group 2, Census Tract 9513, Weston County, Wyoming
    # 217739: 15000US560459513003 -104.2601 43.84355    WY       1373        547     all    150          Block Group 3, Census Tract 9513, Weston County, Wyoming