Me pregunto cómo unir polígonos espaciales con código R.
Estoy trabajando con datos del censo donde ciertas áreas cambian con el tiempo y deseo unir los polígonos y los datos correspondientes y simplemente informar sobre las áreas unidas. Estoy manteniendo una lista de polígonos que tienen cambios de censo a censo y que planeo fusionar. Me gustaría usar esta lista de nombres de áreas como una lista de búsqueda para aplicar a los datos del censo de diferentes años.
Me pregunto qué función R usar para fusionar polígonos seleccionados y datos respectivos. Lo busqué en Google pero simplemente me confundo con los resultados.
polygon
r
spatial-statistics
attribute-joins
census
Geoconfundido
fuente
fuente
R
lamerge
función de.Respuestas:
La siguiente solución se basa en una publicación de Roger Bivand en R-sig-Geo . Tomé su ejemplo reemplazando el archivo de forma alemán con algunos datos del censo de Oregón que puede descargar desde aquí (tome todos los componentes del archivo de forma de 'condados de Oregon y datos del censo').
Comencemos cargando los paquetes requeridos e importando el archivo shape en R.
A continuación, necesita alguna variable de agrupación para agregar los datos. En nuestro ejemplo, la agrupación se basa simplemente en las coordenadas de un solo condado. Vea la imagen a continuación, los bordes negros indican los polígonos originales, mientras que los bordes rojos representan polígonos agregados por
oregon.id
.Hasta aquí todo bien. Sin embargo, los atributos de datos relacionados con las subregiones del archivo de forma original (por ejemplo, densidad de población, área, etc.) se pierden cuando se realiza
unionSpatialPolygons
. Supongo que también le gustaría agregar sus datos censales asociados al archivo shape, por lo que necesitará un paso intermedio.Primero debe convertir sus polígonos en un marco de datos para realizar la agregación. Ahora tomemos las columnas de atributos de datos de seis a ocho ("AREA", "POP1990", "POP1997") y agrúpelas de acuerdo con la función de aplicación de IDs anterior
sum
.Finalmente, reconvierta su marco de datos de nuevo a un archivo de forma
SpatialPolygonsDataFrame
previamente unificadooregon.union
y obtenga tanto polígonos generalizados como sus datos censales derivados del paso de agregación de resumen anterior.fuente
Aquí hay una solución usando el paquete sf:
fuente
summarise()
derivados con eldo_union
argumento, ya que acabo de hacer algo asísummarise_if(shapefile, predic.function, sum, na.rm = TRUE, do_union = TRUE)
, que terminó sumando un VERDADERO en cada celda (es decir, +1 para todas las operaciones). ¿Necesita investigar más para averiguar si eso es algo que debería informarse (al menos para una advertencia adicional) ...?