Estrazione di data.frame dall'oggetto delle caratteristiche semplici in R


44

Esiste un modo nativo di sf (cioè "corretto") per estrarre tutto tranne la colonna geometrica da un semplice oggetto feature? Questo funziona

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

ma il select( , -geometry)passaggio sembra inutile. Inoltre, non rimuove gli attributi della geometria.


2
Possibile anche condf <- st_drop_geometry(df)
radek

@radek Anche nella versione CRAN?
eivindhammers,

Lo vedo così. Attualmente 0.7-2su cran. Ed è qui rdocumentation.org/packages/sf/versions/0.7-2/topics/…
radek l'

Risposte:


36

Impostare la st_geometryproprietà su 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"

Inoltre (anche se questo non rimuoverà il attr(nc, "sf_column"):

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

Ci avevo provato nc$geometry <- NULLprima, ma il tuo suggerimento ha funzionato. Grazie.
eivindhammers,

esiste una versione convogliata di questo? sf %>% mutate(geometry = NULL)non funziona
obrl_soil

2
Forse si chiama "geom" e non "geometria"? (Non sarà mai costante). Un altro modo è `x%>% st_set_geometry (NULL)`. Ognuno di questi potrebbe essere in sviluppo, non CRAN anche se non sto controllando attentamente dove sono localmente.
mdsumner,

@mdsumner fa un punto ottimo, indiretto. Qualcuno deve effettivamente scrivere il metodo, non succede per magia. Poiché sf è una nuova classe di oggetti in R, molti metodi potrebbero non essere disponibili o non comportarsi come previsto.
Jeffrey Evans,

35

Ecco un approccio pipeable per trasformare un oggetto sf in un semplice frame di dati senza geometria. Usa la st_set_geometry()funzione:

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"

MODIFICARE

Su 2018/11/16 , st_drop_geometry()è stato aggiunto al sf, che fa questo in modo esplicito:

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

-5
df <- df[,-geometry_column]

O semplicemente df[,-geometry_column]se non vuoi creare un nuovo oggetto

Dove:

df - il tuo oggetto

geometry_column - colonna in cui è memorizzata la geometria


Non funziona da parte mia. L'hai provato? Faccio sf[, -sf$geometry]e ricevoError in Ops.sfc(grid.sf$geometry) : argument "e2" is missing, with no default
eivindhammers il

Prova sF [, - geometria] non sf [, - sf $ geometria]
ami

sf[, -geometry]fallisce con Error in -"geometry" : invalid argument to unary operator. Riprodurre condata(meuse, package = "sp"); meuse_sf <- st_as_sf(meuse); meuse_sf[, -geometry]
eivindhammers il

5
Questo non funziona in alcun modo. Forse lo ha fatto in alcuni sfpacchetti precedenti , ma ora no. Tutti i sottoinsiemi dei sfframe di dati mantengono la colonna geometrica. Cancella per favore.
Spacedman
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.