答案将取决于您想对属性做什么。
示例数据:
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)
您可以使用 in 中的信息重构属性
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, ]
包terra 有一个unique 方法用于SpatVector 对象:
library(terra)
v <- vect(pp)
u <- unique(pp)
u
# class : SpatVector
# geometry : polygons
# dimensions : 2, 5 (geometries, attributes)
# extent : 5.826232, 6.315773, 49.78479, 50.18162 (xmin, xmax, ymin, ymax)
# coord. ref. : +proj=longlat +datum=WGS84 +no_defs
# names : ID_1 NAME_1 ID_2 NAME_2 AREA
# type : <num> <chr> <num> <chr> <num>
# values : 1 Diekirch 1 Diekirch 312
# 1 Diekirch 2 Diekirch 218