Extrahieren von data.frame aus einem Objekt mit einfachen Features in R


43

Gibt es eine sf-native (dh "richtige") Möglichkeit, alles außer der Geometriespalte aus einem einfachen Feature-Objekt zu extrahieren? Das funktioniert

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

aber der select( , -geometry)schritt fühlt sich unnötig an. Außerdem werden die Geometrieattribute nicht entfernt.


2
Auch möglich mitdf <- st_drop_geometry(df)
— radek

@radek Auch in der CRAN-Version?
— Eivindhammers

Ich glaube schon. Derzeit 0.7-2auf Kran. Und es ist hier rdocumentation.org/packages/sf/versions/0.7-2/topics/…
— radek

Antworten:


36

Setzen Sie die st_geometryEigenschaft auf 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"

Auch (obwohl dies das nicht entfernt attr(nc, "sf_column"):

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

Ich hatte es schon einmal versucht nc$geometry <- NULL, aber Ihr Vorschlag hat es geschafft. Danke.
— Eivindhammers

Gibt es eine Pipe-Version davon? sf %>% mutate(geometry = NULL)funktioniert nicht
— obrl_soil

2
Vielleicht heißt es "Geom" und nicht "Geometrie"? (Es wird niemals konstant sein). Ein anderer Weg ist `x%>% st_set_geometry (NULL)`. Beides ist möglicherweise in dev enthalten, nicht in CRAN, obwohl ich nicht sorgfältig überprüfe, wo ich mich vor Ort befinde.
— mdsumner

@mdsumner macht einen großen, indirekten Punkt. Jemand muss die Methode tatsächlich schreiben, es passiert nicht durch Zauberei. Da sf eine neue Objektklasse in R ist, sind viele Methoden möglicherweise nicht verfügbar oder verhalten sich nicht wie erwartet.
— Jeffrey Evans

34

Hier ist ein Pipeline-Ansatz, um ein sf-Objekt in einen einfachen Datenrahmen ohne Geometrie umzuwandeln. Verwenden Sie die st_set_geometry()Funktion:

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"

BEARBEITEN

Am 2018.11.16 , st_drop_geometry()wurde sf, zugegeben , die dies ausdrücklich tut:

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

-5
df <- df[,-geometry_column]

Oder nur, df[,-geometry_column]wenn Sie kein neues Objekt erstellen möchten

Wo:

df - dein Objekt

geometry_column - Spalte, in der die Geometrie gespeichert ist


Funktioniert nicht an meinem Ende. Hast du es getestet? Ich mache sf[, -sf$geometry]und bekommeError in Ops.sfc(grid.sf$geometry) : argument "e2" is missing, with no default
— eivindhammers

Versuchen Sie sF [, - Geometrie] nicht sf [, - sf $ Geometrie]
— ami

sf[, -geometry]scheitert mit Error in -"geometry" : invalid argument to unary operator. Reproduzieren Sie mitdata(meuse, package = "sp"); meuse_sf <- st_as_sf(meuse); meuse_sf[, -geometry]
— eivindhammers

5
Dies funktioniert in keiner Weise. Vielleicht war es in einem früheren sfPaket so, aber jetzt nicht. Alle Teilmengen von sfDatenrahmen behalten die Geometriespalte bei. Bitte löschen.
— Spacedman
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.