다음 솔루션은 R-sig-Geo의 Roger Bivand의 게시물을 기반으로합니다 . 독일 셰이프 파일을 여기 에서 다운로드 할 수있는 오레곤의 인구 조사 데이터로 바꾸는 그의 예를 보았습니다 ( '오레곤 카운티 및 인구 조사 데이터'의 모든 셰이프 파일 구성 요소를 가져옵니다).
필요한 패키지를로드하고 shapefile을 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)
여태까지는 그런대로 잘됐다. 그러나 원본 shapefile의 하위 영역과 관련된 데이터 속성 (예 : 모집단 밀도, 면적 등)은 수행 할 때 손실됩니다 unionSpatialPolygons
. shapefile과 관련된 인구 조사 데이터를 집계하고 싶습니다. 중간 단계가 필요합니다.
집계를 수행하려면 먼저 다각형을 데이터 프레임으로 변환해야합니다. 이제 데이터 속성 열 6 ~ 8 ( "AREA", "POP1990", "POP1997")을 가져 와서 위의 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)