gpt4 book ai didi

R sf::st_convex_hull() 在多组数据上丢失 sf 类

转载 作者:行者123 更新时间:2023-12-05 06:09:20 25 4
gpt4 key购买 nike

我正在尝试在 R 中使用 sf 创建一个 95% 的最小凸多边形。只要我只将数据分组到 1 个变量上,我的代码就可以正常工作,但是当我分组到两个变量上时,输出将失去其 sf 类并且改为 grouped_df。

这里以一个玩具数据集为例

library(dplyr) 
set.seed(12)
toy <- tibble::tibble(
ID = rep(c(1,2), each = 10),
year = rep(c(1,2), 10),
lat = runif(20, 1, 10),
long = runif(20, 1, 10)
) %>%
sf::st_as_sf(., coords = c("long", "lat"))
toy %>%
group_by(ID) %>%
summarize(.groups = "keep") %>%
mutate(cent = sf::st_centroid(geometry)) %>%
sf::st_cast(to = "POINT") %>%
mutate(dist = sf::st_distance(geometry, cent, by_element = TRUE)) %>%
filter(dist <= quantile(dist, .95)) %>%
summarize() %>%
sf::st_convex_hull() %>%
class()

这给出了我想要的输出。但是当我尝试按两个变量分组时,结果丢失了 sf 类。

toy %>%
group_by(ID, year) %>%
summarize(.groups = "keep") %>%
mutate(cent = sf::st_centroid(geometry)) %>%
sf::st_cast(to = "POINT") %>%
mutate(dist = sf::st_distance(geometry, cent, by_element = TRUE)) %>%
filter(dist <= quantile(dist, .95)) %>%
summarize() %>%
sf::st_convex_hull() %>%
class

我的代码中是否有什么东西阻止我对两个变量进行分组?

最佳答案

因为第二个summarize在ID上重新分组。您需要一个 .groups = "keeps" 来传递相同的分组,然后转换回 sf 对象。或者,您可以创建一个分组变量 mutate(grp = paste0(ID, year)) 并执行 group_by(grp)

toy %>%
group_by(ID, year) %>%
summarize(.groups = "keep") %>%
mutate(cent = sf::st_centroid(geometry)) %>%
sf::st_cast(to = "POINT") %>%
mutate(dist = sf::st_distance(geometry, cent, by_element = TRUE)) %>%
filter(dist <= quantile(dist, .95)) %>%
summarize(.groups = "keep") %>%
sf::st_convex_hull() %>%
st_sf()

关于R sf::st_convex_hull() 在多组数据上丢失 sf 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64851071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com