空間ポリゴンデータフレーム(SPDF)に含まれている列(変数)が多すぎるため、ほとんどの列を完全に削除します。
Rの通常のデータフレームでこれを行う方法を知っていますが、SpatialPolygonsDataFrameクラスのオブジェクトを処理するときにこれを行う方法がわかりませんか?
空間ポリゴンデータフレーム(SPDF)に含まれている列(変数)が多すぎるため、ほとんどの列を完全に削除します。
Rの通常のデータフレームでこれを行う方法を知っていますが、SpatialPolygonsDataFrameクラスのオブジェクトを処理するときにこれを行う方法がわかりませんか?
回答:
構文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"
これは、select関数をパッケージから使用する1つの代替方法dplyr
です。
library(dplyr)
SPDF@data <- SPDF@data %>%
select(1, 3) #keeps column 1 and column 3 in the spdf object.