问题描述
我有一个数据集,该数据集在不同位置具有多个共享相同属性的多边形。我只想在日期集中为每个唯一属性集设置一个多边形(因此在下面的示例中,它们分别为Area
和Zone
)-我不在乎它们的位置,所以我想忽略几何属性。
library(sf)
library(dplyr)
Areas <- st_as_sf(tibble(
Area =c("Zone1","Zone1","Zone2","Zone1"),Zone =c("Area27","Area27","Area42","Area27"),lng = c(20.1,20.2,20.1,20.1),lat = c(-1.1,-1.2,-1.1,-1.1)),coords = c("lng","lat")) %>% st_buffer(.,100)
我正在使用dplyr来删除重复的记录,但是我发现使用了geometry列来确定不同的记录,尽管我认为这应该忽略了geometry列:
Areas %>% distinct(across(-geometry),.keep_all=TRUE)
但是,当几何形状不同时,它将为Zone1和Area27返回两个结果。这是预期的行为还是我做错了什么?
我所需的输出中只有两行,一个用于Zone1和Area27,另一个用于Zone2和Area42,并保留了这些行的几何形状,即类似于您在普通小标题上运行相同代码的情况:>
Table <- tibble(
Area =c("Zone1",-1.1))
Table %>% distinct(across(c(-lng,-lat)),.keep_all=TRUE)
解决方法
我找到了另一种方法:
Areas %>% group_by(Area,Zone) %>%
mutate(id = row_number()) %>%
filter(id == 1) %>%
select(-id)
如果您要处理的多边形数据集很多,这可能比@Waldi的答案要快(至少对我而言)。
,您可以总结一下:
Areas %>% group_by(Area,Zone) %>% summarize()
# A tibble: 2 x 3
# Groups: Area [2]
Area Zone geometry
<chr> <chr> <POLYGON>
1 Zone1 Area27 ((120.2 -1.2,120.063 -6.433596,119.6522 -11.65285,118.9688 -16.84345,118.0~
2 Zone2 Area42 ((120.1 -1.1,119.963 -6.333596,119.5522 -11.55285,118.8688 -16.74345,117.9~