R sf&dplyr:尽管跨组兼容类型,汇总仍失败

时间:2020-07-17 15:41:37

标签: r dplyr backwards-compatibility sf

从dplyr(0.8.3)和sf(0.8.0)开始,以下是可能的(请参见https://stackoverflow.com/a/49354480/9164265):

library(dplyr)
library(sf)

nc <- st_read(system.file("shape/nc.shp", package="sf"))
nc %>%
  group_by(SID74) %>%
  summarise(geometry = st_union(geometry)) %>%
  ungroup()

这会产生将具有相同SID74的每个几何图形合并到自己的MULTIPOLYGON s中的效果。

但是,现在(dplyr 1.0.0)出现以下错误:

Error: Problem with `summarise()` input `geometry`.
x Input `geometry` must return compatible vectors across groups
ℹ Input `geometry` is `st_union(geometry)`.
ℹ Result type for group 1 (SID74 = 0): <sfc_MULTIPOLYGON>.
ℹ Result type for group 2 (SID74 = 1): <sfc_MULTIPOLYGON>.
Run `rlang::last_error()` to see where the error occurred.

有没有人知道为什么dplyr抛出此错误,尽管类型显然属于同一<sfc_MULTIPOLYGON>类? 感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

升级sf 0.8.0 --> 0.9.5时不再显示错误。 尽管这不能解释错误(使用dplyr 1.0.0sf 0.8.0本身,但在升级dplyr时(尤其是通过option => option[returnKey]主要版本)。

答案 1 :(得分:0)

我没有可重现的示例(我现在正处于截止日期内),但是当我运行一些代码时遇到了类似的错误:

df <- df %>% group_by(case_id) %>% dplyr::mutate(status_official = last(na.omit(status)))

每个 case_id 的数据有 1 到 30 行。我认为问题在于有些案例没有非缺失的状态值,而有些则是。当我过滤掉缺少状态值的行时,我没有收到错误消息。