[英]Using dplyr distinct to ignore geometries of sf object in R
我有一個數據集,在不同位置有多個多邊形,它們共享相同的屬性。 對於每組唯一屬性,我只希望在我的日期集中有一個多邊形(所以在我下面的示例中,這將是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 distinct 來刪除重復記錄,但我發現幾何列被用來確定不同的記錄,盡管我認為這應該忽略幾何列:
Areas %>% distinct(across(-geometry),.keep_all=TRUE)
但是,當幾何形狀不同時,它會為 Zone1 和 Area27 返回兩個結果。 這是預期的行為還是我做錯了什么?
我所需的 output 中只有兩行,一行用於 Zone1 和 Area27,另一行用於 Zone2 和 Area42,並保留這些行的幾何形狀,即類似於您在普通 tibble 上運行相同代碼時發生的情況:
Table <- 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))
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~
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.