10 votos

Eliminar cierto polígono de SpatialPolygonDataFrame

Estoy usando R maptools para convertir el shapefile en una lista de polígonos. La función readShapeSpatial

shp <- readShapeSpatial("<path to my shapefile>")

me da un SpatailPolygonDataFrame objeto. En mi ejemplo, mi SpatialPolygonsDataFrame tiene las siguientes columnas:

> names(shp)
[1] "AREA"       "PERIMETER"  "COMAREA_"   "COMAREA_ID" "AREA_NUMBE"
[6] "COMMUNITY"  "AREA_NUM_1" "SHAPE_AREA" "SHAPE_LEN

Sé que puedo eliminar ciertos polígonos por su row.id Por ejemplo

shp.dropI  <- shp[-i, ]
shp.subset <- shp[i %in% c(1,2,3),]

Ahora quiero dejar caer ciertos polígonos con una condición, digamos AREA > 10 . ¿Cómo puedo aplicar esto de forma elegante? El único método que tengo ahora es iterar a través de todas las filas y encontrar las correspondientes row.id .

9voto

Dan Puntos 16

En primer lugar, recomiendo encarecidamente el uso de readOGR, de la biblioteca rgdal, para leer su shapefile. Mantendrá la información de proyección (proj4string) y ahorrará numerosos dolores de cabeza, cuando la cadena de coincidencia, utilizando otras funciones.

Dos formas rápidas de conseguir lo que buscas son usar un índice o usar un subconjunto. Esto retendrá los polígonos con un área < 10 (eliminando los de > 10).

shp.sub <- shp[shp$AREA < 10,] 
shp.sub <- subset(shp, AREA < 10)

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