我需要从R中的SpatialPolygonsDataFrame中删除重复的多边形。有一种方法可以用于点,但不能用于多边形。
我需要这样做才能为空间数据创建类似reshape()的工具。
答案 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
对象与多边形一起使用。