R 单个空间多边形框架行的子集多边形

R 单个空间多边形框架行的子集多边形,r,maptools,rworldmap,R,Maptools,Rworldmap,我想拆分一个由多个多边形几何体组成的空间多边形数据帧行,但我不确定实现这一点的最合理方法。例如,如果我们想从下面的美国移除阿拉斯加,我们可以过滤掉重心超过50度纬度的多边形。有人知道一种相对无痛的方法吗 require(rworldmap) require(maptools) data(countriesCoarse) usa = countriesCoarse[168, ] 对于空间类对象,这种操作通常需要对组件数据结构进行一些痛苦的低级操作。当然,更大的期望是,您只需完成一次,然后编写一个

我想拆分一个由多个多边形几何体组成的空间多边形数据帧行,但我不确定实现这一点的最合理方法。例如,如果我们想从下面的美国移除阿拉斯加,我们可以过滤掉重心超过50度纬度的多边形。有人知道一种相对无痛的方法吗

require(rworldmap)
require(maptools)
data(countriesCoarse)
usa = countriesCoarse[168, ]
对于空间类对象,这种操作通常需要对组件数据结构进行一些痛苦的低级操作。当然,更大的期望是,您只需完成一次,然后编写一个自己的漂亮包装函数,在下次需要时完全按照您的要求完成它

在任何情况下,下面是在您的情况下,较低级别的操作可能会是什么样子:

## 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")