首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R sf::st_convex_hull()丢失具有多个组的数据的sf类

R sf::st_convex_hull()丢失具有多个组的数据的sf类
EN

Stack Overflow用户
提问于 2020-11-16 08:00:08
回答 1查看 127关注 0票数 2

我正在尝试使用R中的sf创建一个95%的最小凸多边形。只要我只对一个变量进行分组,我的代码就可以正常工作,但是当我对两个变量进行分组时,输出就会失去sf类,而变成一个grouped_df。

以下是一个玩具数据集作为示例

代码语言:javascript
复制
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类。

代码语言:javascript
复制
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

是不是我的代码中有什么东西让我无法对两个变量进行分组?

EN

回答 1

Stack Overflow用户

发布于 2020-11-16 11:27:27

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

代码语言:javascript
复制
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()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64851071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档