2017-10-15 9 views
1

data.table과 함께 사용하는 경우 data.table의 잘못된 동작은 sf::st_union과 함께 사용하면 잘못된 집계를 수행하지만 dplyr은 올바르게 처리하는 것 같습니다. 누군가 data.table가이 결과를 산출하는 이유를 설명해 주시겠습니까? 우리가 list에 배치하는 경우sf 패키지

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

, 행의 수는 그것을 잘못된 개체를 만드는 그러나, 기하 구조 컬럼의 속성이 분리되었습니다 23

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

이 될 것입니다; 예를 들어'plot (res $ geom)'을 시도해보십시오. –

+0

@EdzerPebesma를 지적 해 주셔서 감사합니다. 기하 구조 컬럼은 어떤 속성을 유지해야합니까? AFAICT는'class (클래스)'이어야하며, 값은'c '("XY", "MULTIPOLYGON", "sfg")'이어야합니다. 이것은'data.table'과'sf'가 함께 작동하도록 해결되어야 할 문제입니다 (두 프로젝트의 문제점 페이지에서 언급했습니다). – Vijay