Entfernen Sie ein bestimmtes Polygon aus SpatialPolygonDataFrame

9

Ich verwende die R maptools- Bibliothek, um das Shapefile in eine Liste von Polygonen zu analysieren. Die Funktion readShapeSpatial

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

gibt mir ein SpatailPolygonDataFrame- Objekt. In meinem Beispiel hat mein SpatialPolygonsDataFrame die folgenden Spalten:

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

Ich weiß, dass ich bestimmte Polygone durch ihre entfernen kann row.id, z

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

Jetzt möchte ich beispielsweise bestimmte Polygone mit einer Bedingung löschen AREA > 10. Wie setze ich das elegant um? Die einzige Methode, die ich jetzt habe, besteht darin, alle Zeilen zu durchlaufen und entsprechende zu finden row.id.

Der König der Könige
quelle
Seien Sie vorsichtig bei "AREA" -Attributen. Es gibt keine Garantie, dass dies der tatsächliche Bereich ist, oder? Sie können rgeos :: gArea (x, byid = TRUE) verwenden, um es zu berechnen, und rgdal :: spTransform, wenn Sie die Projektion für diese Berechnung ändern müssen.
Mdsumner
@mdsumner du hast vollkommen recht. Guter Punkt
thekingofkings

Antworten:

7

Zunächst würde ich empfehlen, readOGR aus der rgdal-Bibliothek zu verwenden, um Ihr Shapefile zu lesen. Es behält die Projektionsinformationen (proj4string) bei und erspart zahlreiche Kopfschmerzen beim String-Matching mit anderen Funktionen.

Zwei schnelle Möglichkeiten, um das zu erreichen, wonach Sie suchen, sind die Verwendung eines Index oder einer Teilmenge. Dadurch bleiben Polygone mit einer Fläche <10 erhalten (wobei diese> 10 entfernt werden).

shp.sub <- shp[shp$AREA < 10,] 
shp.sub <- subset(shp, AREA < 10)
Jeffrey Evans
quelle
Nett! Ich habe gerade festgestellt, dass diese Frage verallgemeinert werden kann in "Wie werden bestimmte Zeilen in DataFrame mit R ausgewählt?". Und danke auch für den Vorschlag
thekingofkings