RのSpatialPolygonsDataFrameの列を削除しますか?


8

空間ポリゴンデータフレーム(SPDF)に含まれている列(変数)が多すぎるため、ほとんどの列を完全に削除します。

Rの通常のデータフレームでこれを行う方法を知っていますが、SpatialPolygonsDataFrameクラスのオブジェクトを処理するときにこれを行う方法がわかりませんか?

回答:


14

構文object_ name[,-(1:5)]を使用して、列1から5を削除するかobject_name[,-c(1,5)]、列1と5を削除します。以下の例(コメント付き)を参照してください。

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

列の名前を使用するには、ここに Joris Meysのソリューションを実装できます。これは、名前のリストを作成し、それを使用して列をドロップすることで構成されます。

例えば:

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

1

これは、select関数をパッケージから使用する1つの代替方法dplyrです。

library(dplyr)

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

3
空間オブジェクト用に特別に設計されていないパッケージまたは関数を使用して、@ dataスロットを操作することに神経質になります。これが、特別なバージョンのマージがある理由です。マージの基本バージョンは、行名をねじ込み、属性と機能間の関係を破壊します。
Jeffrey Evans

0

次のコマンドでも同じことができますが、列番号を知っている必要があります。

temp<-df[c(1:6,99:103)]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.