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.