2017-10-15 40 views
1

data.tablesf::st_union一起使用時會出現不正確的聚合,而dplyr似乎可以正確處理它。有人可以解釋爲什麼data.table產生這個結果嗎?與sf包一起使用時,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) 

回答

3

如果我們把它放在一個list,行數將是23

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

然而,GEOM列的屬性會被丟棄,使之成爲一個無效的對象;嘗試例如'plot(res $ geom)'。 –

+0

感謝您指出@EdzerPebesma。 geom列應該保留哪些屬性? AFAICT它應該是'class',它應該具有'c(「XY」,「MULTIPOLYGON」,「sfg」)'的值。這是一個問題(在兩個項目的問題頁面上提到),需要解決這個問題才能使'data.table'和'sf'協同工作。 – Vijay

相關問題