我想拆分一个由多个多边形几何组成的spatialPolygonsDataFrame
行,我不确定实现这一目标的最明智的方法。例如,如果我们想要从这里的usa
移除阿拉斯加,我们可以过滤掉质心超过50度的多边形。有谁知道这样做的相对无痛的方式?
require(rworldmap)
require(maptools)
data(countriesCoarse)
usa = countriesCoarse[168, ]
答案 0 :(得分:0)
对于"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")