Christopher
Christopher

Reputation: 2232

R package "acs": Get county name, FIPS?

in search for a solution to an unsolved problem, I came across the acs package. I assume, there's no way within the choropleth package to get any county information from data in the format [city, state]. That's why pre-processing with acs needs to be done.

I tried following code to get the county information on a city:

library(acs)
geo.lookup(state="CA", place="San Francisco")

> geo.lookup(state="CA", place="San Francisco")
  state state.name          county.name place               place.name
1     6 California                 <NA>    NA                     <NA>
2     6 California San Francisco County 67000       San Francisco city
3     6 California     San Mateo County 73262 South San Francisco city

As we know, cities can be part of different counties. Most likely, I will go with the second

> geo.lookup(state="CA", place="San Francisco")[2,]

  state state.name          county.name place         place.name
2     6 California San Francisco County 67000 San Francisco city

by default.

My question: Is there a way to get the state abbreviation, county name and county FIPS, too? I could not find the answer in the documentation.

Also, for further processing (matching with choroplethr), the last "County" in county.name and "city" in place.name need to be removed.

Upvotes: 0

Views: 2114

Answers (1)

Andrew Brēza
Andrew Brēza

Reputation: 8317

Here's how to add the state abbreviation, county name, and county FIPS to your example. R has built-in variables for state names and state abbreviations. For the FIPS codes, I read a csv file from the Census Bureau's website.

library(acs)
library(tidyverse)

states <- cbind(state.name, state.abb) %>% tbl_df()

fips <-
  read_csv(
    "https://www2.census.gov/geo/docs/reference/codes/files/national_county.txt",
    col_names = c("state.abb", "statefp", "countyfp", "county.name", "classfp")
  )

query <- geo.lookup(state = "CA", place = "San Francisco")[2, ] %>%
  tbl_df() %>%
  left_join(states, by = "state.name") %>%
  left_join(fips, by = c("county.name", "state.abb"))

query

# # A tibble: 1 x 9
# state state.name          county.name place         place.name state.abb statefp countyfp classfp
# <chr>      <chr>                <chr> <int>              <chr>     <chr>   <chr>    <chr>   <chr>
#   1     6 California San Francisco County 67000 San Francisco city        CA      06      075      H6

As you note at the end of your question, you may need to clean up this data a bit more to make it fit choroplethr.

Upvotes: 2

Related Questions