Menghapus kolom di SpatialPolygonsDataFrame di R?


8

Kerangka data spasial poligon (SPDF) saya mengandung terlalu banyak kolom (variabel) dan saya ingin menghapus sebagian besar kolom sepenuhnya.

Saya tahu bagaimana melakukan ini dengan bingkai data reguler di R, tapi saya tidak yakin bagaimana melakukan ini ketika berhadapan dengan objek kelas SpatialPolygonsDataFrame?

Jawaban:


14

Gunakan sintaks object_ name[,-(1:5)]untuk menghapus kolom 1 hingga 5 atau object_name[,-c(1,5)]untuk menjatuhkan kolom 1 dan 5. Lihat contoh di bawah ini (dengan komentar):

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

Untuk menggunakan nama-nama kolom, Anda dapat mengimplementasikan solusi Joris Meys 'di sini , yang terdiri dari membuat daftar nama dan menggunakannya untuk menjatuhkan kolom.

Sebagai contoh:

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

1

Berikut adalah salah satu alternatif menggunakan fungsi pilih dari paket dplyr:

library(dplyr)

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

3
Itu membuat saya jelas mengoperasikan pada slot data menggunakan paket atau fungsi yang tidak dirancang khusus untuk objek spasial. Inilah sebabnya mengapa ada versi khusus gabungan, Versi dasar gabungan menggabungkan nama-nama baris dan memutus hubungan antara atribut dan fitur.
Jeffrey Evans

0

Perintah berikut juga berhasil, tetapi Anda harus tahu nomor kolom Anda:

temp<-df[c(1:6,99:103)]
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.