Rによるshpファイルの読み書きと編集

まだ勉強途中ですが、メモとして。
shpファイルをRで読み込み、属性テーブルの編集が出来ます。また、属性テーブルのデータを使って統計モデルや空間モデルを実行できます。


http://www.nceas.ucsb.edu/scicomp/usecases/ReadWriteESRIShapeFiles
この記事によると、いくつか方法があります。

shapename.shpをRに読み込みたいとします。


1.rgdalを使う方法

#読み込み (pathを書かないといけない。 .shpは書かない)
http://www.inside-r.org/packages/cran/rgdal/docs/ogrInfo

in_ogr=readOGR("path","shapename")
classはSpatialPolygonsDataFrameになる。
class(in_ogr)
[1] "SpatialPolygonsDataFrame"
attr(,"package")
[1] "sp"
names(in_ogr)とすると、属性テーブルの名前一覧がみれる。
例えば、属性テーブルにPOP_2000とPOP_2010があったとして、平均を計算し属性テーブルに追加したいとすると、
in_ogr$POP_AVG=(in_ogr$POP_2000+in_ogr$POP2010)/2
とするだけでよい。

#書き込み
writeOGR(in_ogr, "path", "out_ogr", driver="ESRI Shapefile")


2. maptoolsを使う方法
#読み込み (IDを指定)
in_maptools=readShapePoly("shapename.shp")
もしくはIDをあらかじめ指定して
in_maptools=readShapePoly("shapename.shp", IDvar="OBJECTID")

こちらもclassはSpatialPolygonsDataFrameになる。
class(in_maptools)
[1] "SpatialPolygonsDataFrame"
attr(,"package")
[1] "sp"
names(in_maptools)とすると、属性テーブルの名前一覧がみれる。


1と同様で、属性テーブルにPOP_2000とPOP_2010があったとして、平均を計算し属性テーブルに追加したいとすると、
in_maptools$POP_AVG=(in_maptools$POP_2000+in_maptools$POP2010)/2
とするだけでよい。

#書き込み
writePolyShape(in_maptools,"out_maptools.shp")

3. shapefilesを使う方法
#読み込み (.shpを省略して書く)
in_shapefiles=read.Shapefile("shapename")

classはlist

属性テーブルの一覧は
names(in_shapefiles$dbf$dbf)

1、2とほぼ同様で、属性テーブルにPOP_2000とPOP_2010があったとして、平均を計算し属性テーブルに追加したいとすると、
in_shapefiles$POP_AVG=(in_shapefiles$POP_2000+in_shapefiles$POP2010)/2
とするだけでよい。

#書き込み
write.shapefile(in_shpefiles,"out_shapefiles.shp",arcgis=T)