Это не использует tigris
, но использует sf::st_within()
для проверки кадра данных точек для перекрывающихся участков.
Я использую tidycensus
здесь, чтобы получить карту Калифорнийских трактатов в R.
library(sf)
ca <- tidycensus::get_acs(state = "CA", geography = "tract",
variables = "B19013_001", geometry = TRUE)
Теперь для сима некоторые данные:
bbox <- st_bbox(ca)
my_points <- data.frame(
x = runif(100, bbox[1], bbox[3]),
y = runif(100, bbox[2], bbox[4])
) %>%
# convert the points to same CRS
st_as_sf(coords = c("x", "y"),
crs = st_crs(ca))
Я набираю 100 баллов, чтобы получить ggplot()
результаты, но вычисление перекрытия для 1e6 выполняется быстро, на моем ноутбуке всего несколько секунд.
my_points$tract <- as.numeric(st_within(my_points, ca)) # this is fast for 1e6 points
Результаты:
head(my_points) # tract is the row-index for overlapping census tract record in 'ca'
# but part would take forever with 1e6 points
library(ggplot2)
ggplot(ca) +
geom_sf() +
geom_sf(data = my_points, aes(color = is.na(tract)))