使用dplyrdist忽略R

问题描述

我有一个数据集,该数据集在不同位置具有多个共享相同属性的多边形。我只想在日期集中为每个唯一属性集设置一个多边形(因此在下面的示例中,它们分别为AreaZone)-我不在乎它们的位置,所以我想忽略几何属性

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~