通过ID在R中子集一个SpatialPolygonsDataFrame?


13

我使用了包中的gIntersect函数rgeos来确定两个SpatialPolygonsDataFrames(spdfs)中哪些多边形相交。结果是一个逻辑矩阵,其行名包含sfdf#1中的多边形ID,并使用spdf#2中的多边形ID同名。我想使用此矩阵将两个原始spdf分为子集,然后在使用function之前省略那些没有重叠的多边形gIntersection。我可以轻松地将逻辑矩阵转换为两个ID向量(每个spdf一个),这些向量表示那些至少具有一定重叠的多边形。

我的问题是-我可以使用多边形ID的向量来包含spdf吗?如果是这样,它将正确地对@data插槽中的值进行子集化吗?我知道我通常可以使用以下语法对spdf进行子集化:

spdf[spdf@data$myVariable[someVector], ]

这对于ID无效,因为它们被深埋在spdf列表结构中。

Answers:


11

从gIntersect返回的矩阵ID应该与每个源sp对象中的行名相对应。您应该能够仅索引行名位置以对数据进行子集化。

r <- c(1,5,3,9,10)
sp.polys <- sp.polys[r,]

我只想检查-这也可以直接在spdf对象上工作吗?(即spdf[r, ]
Alberto

是的,它适用于sp对象,并且索引通过链接所有插槽对象的ID传播,这些ID与@data行名相对应。
Jeffrey Evans

也许我没有正确阅读,但这看起来有点错误?你应该提取物对一个 r排的名字,使用整数将序数型标尺提取
MichaelChirico

@MichaelChirico用于返回已知的行位置,这是正确的。如果只知道行名的值,则可以使用诸如which(rownames(x)%in%c(1,5))之类的东西来创建索引,除非为行名分配了真实的字符串,否则不进行创建则不需要引用该值。默认行名是带引号的矢量1:n
Jeffrey Evans,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.