次のソリューションは、R-sig-Geoに関するRoger Bivandの投稿に基づいています。ドイツのシェイプファイルを、ここからダウンロードできるオレゴン州のセンサスデータに置き換えた例を取り上げました(すべてのシェイプファイルコンポーネントを「オレゴン州の郡とセンサスデータ」から取得します)。
必要なパッケージをロードし、シェープファイルを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)
次に、データを集約するためにグループ化変数が必要です。この例では、グループ化は単一の郡座標に基づいています。下の画像を参照してください。黒い境界線は元のポリゴンを示し、赤い境界線はで集約され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)
ここまでは順調ですね。ただし、元のシェープファイルのサブ領域に関連するデータ属性(人口密度、面積など)は、実行時に失われunionSpatialPolygons
ます。シェープファイルに関連付けられている国勢調査データも集計したいので、中間ステップが必要になると思います。
集計を実行するには、まずポリゴンをデータフレームに変換する必要があります。次に、データ属性列6〜8( "AREA"、 "POP1990"、 "POP1997")を取得し、functionを適用する上記のIDに従って集計します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)
最後に、データフレームをSpatialPolygonsDataFrame
以前の統合されたシェープファイルoregon.union
を提供するものに再変換し、一般化されたポリゴンと上記の集計集計ステップから派生した国勢調査データの両方を取得します。
# 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)