This repository contains the adjacency structure for US counties. The
information is stored in a .rds
file, to be read into R using the
Matrix
package as follows:
library(Matrix)
library(readr)
A <- readr::read_rds("county-connectivity-2019.rds")
class(A)
#> [1] "dgCMatrix"
#> attr(,"package")
#> [1] "Matrix"
Or:
url <- "https://github.com/ConnorDonegan/county-adjacency/raw/main/county-connectivity-2019.rds"
A <- readr::read_rds(url)
The county FIPS codes (GEOIDs) are strored in the column and row names so that the adjacency structure can be properly aligned to other data sets:
head(colnames(A))
#> [1] "31039" "53069" "35011" "31109" "31129" "46099"
head(rownames(A))
#> [1] "31039" "53069" "35011" "31109" "31129" "46099"
The file make-county-adjacency-file.R
can be used (with some caution)
to reproduce this for any year, 2010-2019 (and futher on as they become
available). There are some slight changes over time in US counties.
The adjacency file was created by calling spdep::poly2nb
on the county
shapefile returned by tigris::counties(year = 2019)
, dropping U.S.
territories, and connecting the islands of Hawaii to each other.
The following code visualizes the connectivity structure:
library(tigris)
#> To enable
#> caching of data, set `options(tigris_use_cache = TRUE)` in your R script or .Rprofile.
library(sf)
#> Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1; sf_use_s2() is TRUE
sdf <- counties() %>%
dplyr::filter(as.numeric(STATEFP) < 57) %>%
shift_geometry(preserve_area = TRUE)
#> | | | 0% | | | 1% | |= | 1% | |= | 2% | |== | 3% | |=== | 4% | |==== | 5% | |==== | 6% | |===== | 7% | |===== | 8% | |====== | 8% | |====== | 9% | |======= | 10% | |======= | 11% | |======== | 11% | |========= | 13% | |========== | 14% | |========== | 15% | |=========== | 16% | |============ | 17% | |============ | 18% | |============= | 18% | |============== | 20% | |=============== | 21% | |=============== | 22% | |================ | 23% | |================ | 24% | |================= | 24% | |================= | 25% | |================== | 26% | |=================== | 26% | |=================== | 27% | |==================== | 29% | |===================== | 29% | |===================== | 30% | |===================== | 31% | |======================= | 32% | |======================= | 33% | |======================== | 34% | |======================== | 35% | |========================== | 37% | |========================== | 38% | |=========================== | 38% | |=========================== | 39% | |============================ | 40% | |============================= | 41% | |============================= | 42% | |============================== | 42% | |============================== | 43% | |============================== | 44% | |=============================== | 44% | |=============================== | 45% | |================================ | 46% | |================================= | 47% | |================================= | 48% | |================================== | 48% | |=================================== | 50% | |=================================== | 51% | |==================================== | 51% | |==================================== | 52% | |===================================== | 53% | |====================================== | 54% | |======================================= | 55% | |======================================= | 56% | |======================================== | 57% | |========================================= | 58% | |========================================= | 59% | |========================================== | 59% | |=========================================== | 61% | |=========================================== | 62% | |============================================ | 62% | |============================================ | 63% | |============================================= | 64% | |============================================= | 65% | |============================================== | 65% | |============================================== | 66% | |=============================================== | 68% | |================================================ | 68% | |================================================ | 69% | |================================================= | 71% | |================================================== | 71% | |=================================================== | 73% | |=================================================== | 74% | |==================================================== | 74% | |===================================================== | 76% | |====================================================== | 76% | |====================================================== | 77% | |======================================================= | 79% | |======================================================== | 80% | |========================================================= | 82% | |========================================================== | 82% | |========================================================== | 83% | |=========================================================== | 84% | |=========================================================== | 85% | |============================================================ | 85% | |============================================================ | 86% | |============================================================= | 87% | |============================================================= | 88% | |============================================================== | 88% | |=============================================================== | 90% | |=============================================================== | 91% | |================================================================ | 91% | |================================================================= | 92% | |================================================================= | 93% | |================================================================= | 94% | |================================================================== | 94% | |=================================================================== | 96% | |==================================================================== | 96% | |==================================================================== | 97% | |===================================================================== | 99% | |======================================================================| 99% | |======================================================================| 100%
E <- Matrix::summary(Matrix::Matrix(A))
E <- E[which(E$i < E$j), ]
G <- list(np = nrow(A), # confrom to spdep graph structure, then back to nb to map it
from = E$i,
to = E$j,
nedges = nrow(E)
)
class(G) <- "Graph"
nb <- spdep::graph2nb(G)
plot(nb, sf::st_geometry(sdf))