2

data.tablesf::st_union与while一起使用时进行不正确的聚合dplyr似乎可以正确处理它。有人可以解释为什么会data.table产生这个结果吗?

library(data.table)
library(sf)
library(dplyr)
nc <- st_read(system.file("shape/nc.shp",package="sf"))
nc_DT <- as.data.table(nc)
nc %>% group_by(SID74) %>% summarise(geom = st_union(geometry)) %>% nrow # prints 23 (correct answer)
nrow(nc_DT[,st_union(geometry),by=SID74])  # prints 83 (incorrect answer)
4

1 回答 1

4

如果我们把它放在 alist中,行数将是 23

res <- nc_DT[, .(geom = st_union(geometry)),by=SID74]
nrow(res)
#[1] 23

然后,您可以像这样轻松地恢复几何列的属性:

res <- st_sf(res)
plot(res)
于 2017-10-15T02:26:54.590 回答