La seguente soluzione si basa su un post di Roger Bivand su R-sig-Geo . Ho preso il suo esempio sostituendo lo shapefile tedesco con alcuni dati di censimento dell'Oregon che puoi scaricare da qui (prendi tutti i componenti dello shapefile da "Contee dell'Oregon e dati di censimento").
Cominciamo con il caricamento dei pacchetti richiesti e l'importazione dello shapefile in R.
# Required packages
libs <- c("rgdal", "maptools", "gridExtra")
lapply(libs, require, character.only = TRUE)
# Import Oregon census data
oregon <- readOGR(dsn = "path/to/data", layer = "orcounty")
oregon.coords <- coordinates(oregon)
Successivamente, sono necessarie alcune variabili di raggruppamento per aggregare i dati. Nel nostro esempio, il raggruppamento si basa semplicemente sulle coordinate della singola contea. Vedi l'immagine sotto, i bordi neri indicano i poligoni originali, mentre i bordi rossi rappresentano i poligoni aggregati per oregon.id.
# Generate IDs for grouping
oregon.id <- cut(oregon.coords[,1], quantile(oregon.coords[,1]), include.lowest=TRUE)
# Merge polygons by ID
oregon.union <- unionSpatialPolygons(oregon, oregon.id)
# Plotting
plot(oregon)
plot(oregon.union, add = TRUE, border = "red", lwd = 2)

Fin qui tutto bene. Tuttavia, gli attributi dei dati relativi alle sottoregioni dello shapefile originale (ad es. Densità di popolazione, area, ecc.) Si perdono durante l'esecuzione unionSpatialPolygons. Suppongo che desideri aggregare anche i dati del censimento associati allo shapefile, quindi avrai bisogno di un passaggio intermedio.
Devi prima convertire i tuoi poligoni in un frame di dati per eseguire l'aggregazione. Ora prendiamo le colonne degli attributi di dati da sei a otto ("AREA", "POP1990", "POP1997") e aggregiamole secondo la funzione di applicazione degli ID sopra sum.
# Convert SpatialPolygons to data frame
oregon.df <- as(oregon, "data.frame")
# Aggregate and sum desired data attributes by ID list
oregon.df.agg <- aggregate(oregon.df[, 6:8], list(oregon.id), sum)
row.names(oregon.df.agg) <- as.character(oregon.df.agg$Group.1)
Infine, riconvertisci il tuo frame di dati in un SpatialPolygonsDataFramefile di forma precedentemente unificato oregon.unione ottieni sia poligoni generalizzati che i tuoi dati di censimento derivati dal precedente passaggio di aggregazione di riepilogo.
# Reconvert data frame to SpatialPolygons
oregon.shp.agg <- SpatialPolygonsDataFrame(oregon.union, oregon.df.agg)
# Plotting
grid.arrange(spplot(oregon, "AREA", main = "Oregon: original county area"),
spplot(oregon.shp.agg, "AREA", main = "Oregon: aggregated county area"), ncol = 1)
