5 votos

¿Cómo eliminar las columnas no deseadas de un polígono en R y mantener el resultado como un marco de datos espacial?

Para simplificar mi problema, voy a empezar por el origen en lugar de explicar mi problema de mapa completo.

Tengo un shapefile de Etiopía sacado de GADM ( puede descargarse aquí ). Muchas de las columnas de atributos son innecesarias y sólo crean una confusión adicional cuando realizo recortes/uniones/etc. con el shapefile. Así que quiero eliminar todas las columnas excepto las 4 primeras. Hacer esto parece bastante fácil, y he intentado y tenido éxito con este poco de código:

library(rgdal)

#read in shapefile
eth <- readOGR(dsn = "D:/Mapping-R/Ethiopia", layer = "ETH_adm0")

#subset data/remove columns
eth <- eth@data[, -(5:67)]

En efecto, esto me deja sólo con las 4 primeras columnas, pero también hace que el objeto sea un marco de datos normal en lugar de un marco de datos espacial listo para el mapeo. Entonces, ¿cómo puedo eliminar estas columnas no deseadas manteniendo el estado de SPDF?

3 votos

eth@data <- eth@data[, -(5:67)]

2 votos

¡¡Eck!! ¡No uses ranuras! eth <- eth[, -(5:67)]

1 votos

También, vea ?raster::getData para obtener estos datos dinámicamente.

5voto

sgwill Puntos 2444

No se ha probado.

library(rgdal)

#read in shapefile
eth <- readOGR(dsn = "D:/Mapping-R/Ethiopia", layer = "ETH_adm0")

#subset data/remove columns
eth <- eth[, -(5:67)] 

No utilices las ranuras "@", son para los desarrolladores. He aquí por qué:

library(sp)
data(meuse)
coordinates(meuse) <- c("x", "y")
# legal, but totally borked
meuse@data <- meuse@data[1:2, ]
meuse  ## whoops
Error in data.frame(coordinates = cc, x@data) : 
 arguments imply differing number of rows: 155, 2

1 votos

No estoy de acuerdo con que no se utilice la llamada de ranura. En la mayoría de los casos es el enfoque más seguro.

1 votos

Eso es una locura.

0 votos

Ciertamente podemos estar de acuerdo en no estar de acuerdo, pero soy un desarrollador de paquetes de R (5 y contando) y hay casos en los que es absolutamente necesario llamar a la ranura de datos. Tu ejemplo no tiene mucho sentido porque estás subconjuntando las dos primeras filas y no las columnas, lo que yo consideraría simplemente un error de sintaxis y no un argumento para no usar ranuras. Además, usando tu lógica, ¿cómo añadirías una columna?

-2voto

JoeBilly Puntos 86

Haga clic con el botón derecho para ir a las propiedades y ver los datos del campo y desmarque las columnas innecesarias, asegúrese de no desmarcar la forma y la longitud.

Exporta el shapefile a otra ubicación y ábrelo de nuevo para comprobar si sigues teniendo esas columnas. Debería poder realizar su tarea.

4 votos

Esta no es una solución que se dirija a la pregunta del OP sobre cómo hacer esto en R y ni siquiera notas a qué software te refieres.

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