Solusi berikut didasarkan pada posting oleh Roger Bivand di R-sig-Geo . Saya mengambil contohnya mengganti shapefile Jerman dengan beberapa data sensus dari Oregon yang dapat Anda unduh dari sini (ambil semua komponen shapefile dari 'kabupaten Oregon dan data sensus').
Mari kita mulai dengan memuat paket-paket yang diperlukan dan mengimpor shapefile ke 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)
Selanjutnya, Anda memerlukan beberapa variabel pengelompokan untuk mengumpulkan data. Dalam contoh kami, pengelompokan hanya didasarkan pada koordinat county tunggal. Lihat gambar di bawah, batas hitam menunjukkan poligon asli, sedangkan batas merah mewakili poligon yang dikumpulkan 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)
Sejauh ini baik. Namun, atribut data yang terkait dengan subregional shapefile asli (mis. Kepadatan populasi, luas, dll.) Hilang saat beraksi unionSpatialPolygons
. Saya kira Anda juga ingin menggabungkan data sensus Anda yang terkait dengan shapefile, sehingga Anda memerlukan langkah menengah.
Pertama-tama Anda harus mengonversi poligon Anda ke bingkai data untuk melakukan agregasi. Sekarang mari kita ambil kolom atribut data enam hingga delapan ("AREA", "POP1990", "POP1997") dan agregat sesuai dengan fungsi penerapan ID di atas 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)
Akhirnya, konversikan kembali kerangka data Anda ke SpatialPolygonsDataFrame
penyediaan shapefile yang sebelumnya tidak disatukan oregon.union
dan Anda memperoleh poligon umum dan data sensus Anda yang diperoleh dari langkah agregasi perangkuman di atas.
# 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)