Xóa các cột trong SpatialPolygonsDataFrame trong R?


8

Khung dữ liệu đa giác không gian (SPDF) của tôi chứa quá nhiều cột (biến) và tôi muốn loại bỏ hầu hết các cột hoàn toàn.

Tôi biết cách thực hiện việc này với khung dữ liệu thông thường trong R, nhưng tôi không chắc chắn cách thực hiện việc này khi xử lý đối tượng của lớp SpatialPolygonsDataFrame?

Câu trả lời:


14

Sử dụng cú pháp object_ name[,-(1:5)]để xóa các cột 1 đến 5 hoặc object_name[,-c(1,5)]để thả các cột 1 và 5. Xem ví dụ bên dưới (có nhận xét):

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

Để sử dụng tên của các cột, bạn có thể triển khai giải pháp của Joris Meys tại đây , bao gồm việc tạo một danh sách các tên và sử dụng nó để thả các cột.

Ví dụ:

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

1

Đây là một thay thế bằng cách sử dụng chức năng chọn từ gói dplyr:

library(dplyr)

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

3
Nó khiến tôi lo lắng khi vận hành trên khe @data bằng cách sử dụng các gói hoặc chức năng không được thiết kế riêng cho các đối tượng không gian. Đây là lý do tại sao có một phiên bản hợp nhất đặc biệt, Phiên bản cơ sở của hợp nhất vít lên tên hàng và phá vỡ mối quan hệ giữa các thuộc tính và tính năng.
Jeffrey Evans

0

Lệnh sau cũng thực hiện thủ thuật, nhưng bạn phải biết số cột của mình:

temp<-df[c(1:6,99:103)]
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.