Mengekstrak data.frame dari objek fitur sederhana di R


43

Apakah ada cara sf-asli (yaitu "benar") mengekstraksi segala sesuatu kecuali kolom geometri dari objek fitur sederhana? Ini bekerja

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

tapi select( , -geometry)langkah itu terasa tidak perlu. Juga, itu tidak menghapus atribut geometri.


2
Juga dimungkinkan dengandf <- st_drop_geometry(df)
radek

@radek Juga dalam versi CRAN?
eivindhammers

Saya percaya begitu. Saat ini sedang 0.7-2menggunakan cran. Dan ini ada di sini rdocumentation.org/packages/sf/versions/0.7-2/topics/…
radek

Jawaban:


36

Setel st_geometryproperti ke 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"

Juga (meskipun ini tidak akan menghapus attr(nc, "sf_column"):

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

Saya sudah mencoba nc$geometry <- NULLsebelumnya, tetapi saran Anda berhasil. Terima kasih.
eivindhammers

apakah ada versi pipa dari ini? sf %>% mutate(geometry = NULL)tidak berfungsi
obrl_soil

2
Mungkin itu disebut "geom" dan bukan "geometri"? (Tidak akan pernah konstan). Cara lain adalah `x%>% st_set_geometry (NULL)`. Salah satu dari ini mungkin dalam dev, bukan CRAN meskipun saya tidak memeriksa dengan hati-hati di mana saya berada di lokal.
mdsumner

@mdsumner membuat poin bagus, tidak langsung. Seseorang harus benar-benar menulis metodenya, itu tidak terjadi dengan sihir. Karena sf adalah kelas objek baru dalam R banyak metode mungkin tidak tersedia atau tidak berperilaku seperti yang diharapkan.
Jeffrey Evans

34

Berikut ini adalah pendekatan pipabel untuk mengubah objek sf menjadi bingkai data sederhana tanpa geometri. Gunakan st_set_geometry()fungsinya:

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"

EDIT

Pada 11/16/2018 , st_drop_geometry()ditambahkan ke sf, yang melakukan ini secara eksplisit:

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

-5
df <- df[,-geometry_column]

Atau hanya df[,-geometry_column]jika Anda tidak ingin membuat objek baru

Dimana:

df - objek Anda

geometry_column - kolom tempat geometri disimpan


Tidak bekerja pada saya. Sudahkah Anda mengujinya? Saya lakukan sf[, -sf$geometry]dan dapatkanError in Ops.sfc(grid.sf$geometry) : argument "e2" is missing, with no default
eivindhammers

Coba sF [, - geometri] bukan sf [, - sf $ geometry]
ami

sf[, -geometry]gagal dengan Error in -"geometry" : invalid argument to unary operator. Reproduksi dengandata(meuse, package = "sp"); meuse_sf <- st_as_sf(meuse); meuse_sf[, -geometry]
eivindhammers

5
Ini tidak bekerja dengan cara apa pun. Mungkin itu dilakukan dalam beberapa sfpaket sebelumnya , tetapi sekarang tidak. Semua subset dari sfframe data mempertahankan kolom geometri. Tolong hapus.
Spacedman
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.