Aşağıdaki çözüm Roger Bivand tarafından R-sig- Geo'daki bir yayına dayanıyor . Sana indirebileceğiniz Oregon bazı sayım verileri ile Alman shape dosyası yerine onu örnek aldı burada ( 'Oregon ilçeleri ve sayım verilerinden' dan tüm şekil dosyası bileşenleri almak).
Gerekli paketleri yüklemekle ve shape dosyasını R'ye almakla başlayalım.
# 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)
Daha sonra, verileri toplamak için bazı gruplama değişkenlerine ihtiyacınız vardır. Örneğimizde, gruplama basitçe tek ilçe koordinatlarına dayanmaktadır. Aşağıdaki resme bakın, siyah kenarlıklar orijinal çokgenleri gösterir, kırmızı kenarlıklar ise toplanan çokgenleri temsil eder 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)
Çok uzak çok iyi. Ancak, orijinal şekil dosyasının alt bölgelerine (örneğin, popülasyon yoğunluğu, alan vb.) İlişkin veri nitelikleri gerçekleştirilirken kayboluyor unionSpatialPolygons
. Sanırım şekil dosyasıyla ilişkili sayım verilerinizi de birleştirmek istiyorsunuz, bu nedenle orta bir adıma ihtiyacınız olacak.
İlk önce, çokgenlerinizi birleştirme gerçekleştirmek için bir veri çerçevesine dönüştürmeniz gerekir. Şimdi altıdan sekize ("AREA", "POP1990", "POP1997") veri özniteliğini alalım ve bunları yukarıdaki ID uygulama fonksiyonuna göre toplayalım 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)
Son olarak, veri birimini SpatialPolygonsDataFrame
daha önce birleştirilmiş şekil dosyasını sağlayarak geri dönüştürün oregon.union
ve hem genelleştirilmiş çokgenleri hem de yukarıdaki özetleme toplama adımından türetilen sayım verilerinizi elde edin.
# 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)