Spalten in einem SpatialPolygonsDataFrame in R entfernen?


8

Mein räumlicher Polygondatenrahmen (SPDF) enthält zu viele Spalten (Variablen), und ich möchte die meisten Spalten vollständig entfernen.

Ich weiß, wie das mit einem regulären Datenrahmen in R gemacht wird, bin mir aber nicht sicher, wie ich das machen soll, wenn ich mich mit Objekten der Klasse SpatialPolygonsDataFrame befasse.

Antworten:


14

Verwenden Sie die Syntax object_ name[,-(1:5)], um die Spalten 1 bis 5 zu entfernen oder object_name[,-c(1,5)]die Spalten 1 und 5 zu löschen. Siehe das folgende Beispiel (mit Kommentaren):

require(maptools)

#load shapefile from maptools package to make a reproducible example.
xx <- readShapeSpatial(system.file("shapes/sids.shp", package="maptools")[1],
                   IDvar="FIPSNO", proj4string=CRS("+proj=longlat +ellps=clrk66"))

class(xx) #check the object class
#[1] "SpatialPolygonsDataFrame"
#attr(,"package")
#[1] "sp"

head(xx@data,3) #print first three rows from the slot 'data'

       AREA PERIMETER CNTY_ CNTY_ID      NAME  FIPS FIPSNO CRESS_ID BIR74 SID74
      0.111     1.392  1904    1904  Alamance 37001  37001        1  4672    13
      0.066     1.070  1950    1950 Alexander 37003  37003        2  1333     0
      0.061     1.231  1827    1827 Alleghany 37005  37005        3   487     0

      NWBIR74 BIR79 SID79 NWBIR79
         1243  5767    11    1397
          128  1683     2     150
           10   542     3      12

xxx <- xx[,-(1:5)] #remove columns 1 to 5

head(xxx@data,3) #print the subsetted data frame

     FIPS FIPSNO CRESS_ID BIR74 SID74 NWBIR74 BIR79 SID79 NWBIR79
     37001  37001        1  4672    13    1243  5767    11    1397
     37003  37003        2  1333     0     128  1683     2     150
     37005  37005        3   487     0      10   542     3      12

Um die Namen von Spalten zu verwenden, können Sie hier die Lösung von Joris Meys implementieren , die darin besteht, eine Liste von Namen zu erstellen und diese zum Löschen der Spalten zu verwenden.

Zum Beispiel:

drops <- c("AREA","PERIMETER") # list of col names
xxx <- xx[,!(names(xx) %in% drops)] #remove columns "AREA" and "PERIMETER"

1

Hier ist eine Alternative, die die Auswahlfunktion aus dem Paket verwendet dplyr:

library(dplyr)

SPDF@data <- SPDF@data %>% 
select(1, 3) #keeps column 1 and column 3 in the spdf object.

3
Es macht mich nervös, am @ data-Slot mit Paketen oder Funktionen zu arbeiten, die nicht speziell für räumliche Objekte entwickelt wurden. Aus diesem Grund gibt es eine spezielle Version der Zusammenführung. Die Basisversion der Zusammenführung vermasselt die Zeilennamen und unterbricht die Beziehungen zwischen den Attributen und Features.
Jeffrey Evans

0

Der folgende Befehl macht auch den Trick, aber Sie müssen Ihre Spaltennummern kennen:

temp<-df[c(1:6,99:103)]
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.