R의 간단한 지형지 ​​물 객체에서 data.frame 추출


43

간단한 지형지 ​​물 객체에서 지오메트리 열을 제외한 모든 것을 추출하는 sf-native (즉, "올바른") 방법이 있습니까? 이 작동합니다

df <- dplyr::select(as.data.frame(sf), -geometry)

그러나 select( , -geometry)단계는 불필요하다고 느낍니다. 또한 지오메트리 속성을 제거하지 않습니다.


2
df <- st_drop_geometry(df)
radek

@radek CRAN 버전에도 있습니까?
eivindhammers

나는 그렇게 믿습니다. 현재 0.7-2크랜에 있습니다. 그리고 그것은 여기 rdocumentation.org/packages/sf/versions/0.7-2/topics/…
radek

답변:


36

st_geometry속성을로 설정하십시오 NULL.

library(sf)
nc <-  st_read(system.file("shape/nc.shp", package="sf"), quiet = TRUE)
class(nc)
## [1] "sf"         "data.frame"
st_geometry(nc) <- NULL
class(nc)
## [1] "data.frame"

또한 (이것은 제거하지는 않습니다 attr(nc, "sf_column") :

nc <-  st_read(system.file("shape/nc.shp", package="sf"), quiet = TRUE)
as.data.frame(nc)

나는 nc$geometry <- NULL전에 시도 했지만 당신의 제안은 트릭을했다. 감사합니다.
eivindhammers 2012 년

파이프 버전이 있습니까? sf %>% mutate(geometry = NULL)작동하지 않음
obrl_soil

2
어쩌면 "형상"이 아니라 "형상"이라고 불리는 것일까 요? (항상 일정하지는 않습니다). 또 다른 방법은`x %> % st_set_geometry (NULL)`입니다. 로컬에있는 곳을주의 깊게 확인하지는 않지만 CRAN이 아닌이 중 하나 일 수 있습니다.
mdsumner

@mdsumner는 훌륭하고 간접적 인 지적을합니다. 누군가는 실제로 방법을 작성해야하지만 마술로 발생하지 않습니다. sf는 R의 새로운 객체 클래스이므로 많은 메소드를 사용할 수 없거나 예상대로 작동하지 않을 수 있습니다.
Jeffrey Evans

33

다음은 sf 객체를 지오메트리없이 간단한 데이터 프레임으로 변환하는 파이프 가능한 접근 방식입니다. st_set_geometry()기능을 사용하십시오 :

library(sf)
nc <-  st_read(system.file("shape/nc.shp", package="sf"), quiet = TRUE)
class(nc)
#> [1] "sf"         "data.frame"

nc_df <- nc %>% st_set_geometry(NULL)
class(nc_df)
#> [1] "data.frame"

편집하다

2018년 11월 16일 , st_drop_geometry()이 명시 적으로 수행 김포에 추가되었습니다

nc_df2 <- nc %>% st_drop_geometry()
class(nc_df2)
#> [1] "data.frame"

-5
df <- df[,-geometry_column]

또는 df[,-geometry_column]새 객체를 만들고 싶지 않은 경우

어디:

df-객체

geometry_column-지오메트리가 저장된 열


내 끝에서 작동하지 않습니다. 테스트 했습니까? 내가 할 sf[, -sf$geometry]얻을Error in Ops.sfc(grid.sf$geometry) : argument "e2" is missing, with no default
eivindhammers

sf [,-sf $ geometry]가 아니라 sF [,-geometry] 시도
ami

sf[, -geometry]로 실패합니다 Error in -"geometry" : invalid argument to unary operator. 재생산data(meuse, package = "sp"); meuse_sf <- st_as_sf(meuse); meuse_sf[, -geometry]
eivindhammers

5
이것은 어떤 식 으로든 작동하지 않습니다. 어쩌면 이전 sf패키지 에서 수행되었을 수도 있지만 지금은 그렇지 않습니다. sf데이터 프레임 의 모든 하위 설정은 지오메트리 열을 유지합니다. 삭제 해주세요.
Spacedman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.