La siguiente solución se basa en una publicación de Roger Bivand en R-sig-Geo. Tomé su ejemplo reemplazando el shapefile alemán con algunos datos censales de Oregón que puedes descargar desde aquí (toma todos los componentes del shapefile de 'Condados y datos censales de Oregón').
Comencemos cargando los paquetes requeridos e importando el shapefile a R.
# Paquetes requeridos
libs <- c("rgdal", "maptools", "gridExtra")
lapply(libs, require, character.only = TRUE)
# Importar datos censales de Oregón
oregon <- readOGR(dsn = "path/to/data", layer = "orcounty")
oregon.coords <- coordinates(oregon)
A continuación, necesitas alguna variable de agrupación para poder agregar los datos. En nuestro ejemplo, la agrupación se basa simplemente en las coordenadas individuales del condado. Observa la imagen a continuación, los bordes negros indican los polígonos originales, mientras que los bordes rojos representan los polígonos agregados por oregon.id
.
# Generar IDs para la agrupación
oregon.id <- cut(oregon.coords[,1], quantile(oregon.coords[,1]), include.lowest=TRUE)
# Unir polígonos por ID
oregon.union <- unionSpatialPolygons(oregon, oregon.id)
# Graficar
plot(oregon)
plot(oregon.union, add = TRUE, border = "red", lwd = 2)
Hasta ahora, todo va bien. Sin embargo, los atributos de los datos relacionados con las subregiones originales del shapefile (por ejemplo, densidad de población, área, etc.) se pierden al realizar unionSpatialPolygons
. Supongo que también te gustaría agregar tus datos censales asociados al shapefile, por lo que necesitarás un paso intermedio.
Primero debes convertir tus polígonos a un dataframe para poder realizar la agregación. Ahora tomemos las columnas de atributos de datos seis a ocho ("AREA", "POP1990", "POP1997") y agrupémoslas según los IDs anteriores aplicando la función sum
.
# Convertir SpatialPolygons a dataframe
oregon.df <- as(oregon, "data.frame")
# Agregar y sumar los atributos de datos deseados por lista de ID
oregon.df.agg <- aggregate(oregon.df[, 6:8], list(oregon.id), sum)
row.names(oregon.df.agg) <- as.character(oregon.df.agg$Group.1)
Finalmente, reconvierne tu dataframe de nuevo a un SpatialPolygonsDataFrame
proporcionando el shapefile unificado previamente oregon.union
y obtendrás tanto polígonos generalizados como tus datos censales derivados del paso de agregación de resumen anterior.
# Reconvertir dataframe a SpatialPolygons
oregon.shp.agg <- SpatialPolygonsDataFrame(oregon.union, oregon.df.agg)
# Graficar
grid.arrange(spplot(oregon, "AREA", main = "Oregón: área original del condado"),
spplot(oregon.shp.agg, "AREA", main = "Oregón: área del condado agregada"), ncol = 1)
0 votos
La respuesta a la mayoría de las operaciones de geometría como disolver polígonos, superponer, punto en polígono, intersección, unión, etc. es el paquete rgeos.
1 votos
La Oficina del Censo de EE. UU. publica tablas para hacer esto para 1990-2000 y 2000-2010. Pueden ser manejadas con uniones de base de datos, las cuales son implementadas por la función
R
merge
.