单个 spatialPolygonsDataFrame 行的子集多边形

Subset polygons of a single spatialPolygonsDataFrame row

我想拆分包含多个多边形几何图形的单个 spatialPolygonsDataFrame 行,但我不确定实现此操作的最明智方法。例如,如果我们想从下面的 usa 中删除阿拉斯加,我们可以过滤掉质心超过 50 度纬度的多边形。有谁知道一种相对轻松的方法吗?

require(rworldmap)
require(maptools)
data(countriesCoarse)
usa = countriesCoarse[168, ]

对于 "Spatial-class" 对象,这种操作通常需要对组件数据结构进行一些痛苦的低级操作。 (当然,更大的期望是您将执行此操作一次,然后自己编写一个漂亮的包装函数,在您下次需要它时完全按照您的要求完成!)

无论如何,在您的情况下,较低级别的操作可能如下所示:

## Extract component "Polygon" objects
pp <- usa@polygons[[1]]@Polygons
## Find indices of non-Alaska Polygon objects
ii <- sapply(pp, function(X) mean(coordinates(X)[,2])<50)

## Put desired Polygon objects back together in a built-from-scratch SpatialPolygons obj.
## Note: ID will need to match row name of data.frame attached to SpatialPolygons object
USA49 <-
SpatialPolygons(list(Polygons(srl = pp[ii], ID = rownames(data.frame(usa)))),
                proj4string=CRS(proj4string(usa)))
## Reattach attributes in data.frame(usa)
USA49 <- SpatialPolygonsDataFrame(USA49, data = data.frame(usa))

## Check that it worked
plot(USA49, col="lightgrey")