R从SpatialPolygonsDataFrame中删除重复的多边形

时间:2018-02-22 05:42:17

标签: r sp

我需要从R中的SpatialPolygonsDataFrame中删除重复的多边形。有一种方法可以用于点,但不能用于多边形。

我需要这样做才能为空间数据创建类似reshape()的工具。

3 个答案:

答案 0 :(得分:1)

如果通过重复多边形表示具有相同数据的多边形,则可以使用此代码:

shp <- shapefile("shape.shp")
shp <- shp[!duplicated(shp@data),]

修改

如果重复的多边形是指具有相同坐标(@coords槽)的多边形,则可以使用以下代码:

shp <- shapefile("shape.shp")
coord_poly <- lapply(shp@polygons, function(x){lapply(x@Polygons, function(x){coordinates(x)})}) 
shp <- shp[!duplicated(coord_poly),]

答案 1 :(得分:1)

答案取决于你想要对属性做什么。

示例数据:

library(raster)   
p <- shapefile(system.file("external/lux.shp", package="raster"))
p <- p[1:2, ]
pp <- bind(p,p)
data.frame(pp)

#  ID_1   NAME_1 ID_2   NAME_2 AREA
#1    1 Diekirch    1 Clervaux  312
#2    1 Diekirch    2 Diekirch  218
#3    1 Diekirch    1 Clervaux  312
#4    1 Diekirch    2 Diekirch  218

如果要组合具有相同属性(但可能是不同区域)的多边形,可以使用聚合:

a <- aggregate(pp, names(pp))
data.frame(a)

#  ID_1   NAME_1 ID_2   NAME_2 AREA
#1    1 Diekirch    1 Clervaux  312
#2    1 Diekirch    2 Diekirch  218

如果你知道它们在区域和属性上是重复的,你可以使用@ DJack的解决方案:

b <- pp[!duplicated(data.frame(pp)),]

如果只是你关心的领域,你可以做到

d <- union(pp)

您可以使用

中的信息重新构建属性
data.frame(d)
#     ID.1 ID.2 ID.3 ID.4 count
#1    1    0    1    0     2
#2    0    1    0    1     2

但在这种情况下,做起来会更简单:

g <- geom(pp)
x <- split(g[,c(2, 4:6)], g[,1])
dd <- duplicated(x)
dd
[1] FALSE FALSE  TRUE  TRUE

其次是

z <- pp[!dd, ]

答案 2 :(得分:0)

尝试将rgeos::gEquals(x, byid = TRUE)x对象与多边形一起使用。