69 votos

Extracción de data.frame de un objeto de características simples en R

¿Existe una manera sf-nativa (es decir, "correcta") de extraer todo excepto la columna de geometría de un objeto de características simples? Esto funciona

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

pero el select( , -geometry) paso parece innecesario. Además, no elimina los atributos de la geometría.

71voto

mfherman Puntos 631

Para eliminar la columna de geometría, utilice st_drop_geometry() :

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

Antes de st_drop_geometry() se añadió a la sf paquete (en Noviembre, 2018 ), se podría obtener el mismo resultado utilizando el st_set_geometry() función, así:

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"

49voto

sgwill Puntos 2444

Establecer el st_geometry propiedad a 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"

Además (aunque esto no eliminará el attr(nc, "sf_column" ):

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

1voto

Jim Puntos 61

¿por qué no seleccionar simplemente las columnas que desea?

as.data.frame(sf[,"some column name"])[,1]

0voto

Omni Puntos 161

as.data.frame(your_sf_object)[,-ncol(your_sf_object)] devuelve todas las columnas de atributos excepto su geometría. Además, utiliza as.data.frame(your_sf_object)[,-8] si su octava columna es de geometría.

Si prefiere utilizar data.table en lugar de data.frame, puede utilizar

data.table(your_sf_object)[,-ncol(your_sf_object),with=F]

o data.table(your_sf_object)[,-8,with=F] si su octava columna es de geometría.

NOTA: Esta es mi respuesta a una pregunta ya antigua, pero llegará el momento en que necesite esta solución de nuevo pero he olvidado cómo lo hice, así que este es un buen lugar para guardar la solución. En fin, esta solución la saqué de este hilo. Sinceramente, Atentamente...

-5voto

ami Puntos 136
df <- df[,-geometry_column]

O simplemente df[,-geometry_column] si no quieres crear un nuevo objeto

Dónde:

df - su objeto

geometry_column - columna donde se almacena la geometría

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X