SpatialPolygonDataFrameから特定のポリゴンを削除する


9

R maptoolsライブラリを使用して、シェープファイルを解析してポリゴンのリストを作成しています。関数readShapeSpatial

shp <- readShapeSpatial("<path to my shapefile>")

私に与えSpatailPolygonDataFrameのオブジェクトを。私の例では、SpatialPolygonsDataFrameに次の列があります。

> names(shp)
[1] "AREA"       "PERIMETER"  "COMAREA_"   "COMAREA_ID" "AREA_NUMBE"
[6] "COMMUNITY"  "AREA_NUM_1" "SHAPE_AREA" "SHAPE_LEN

特定のポリゴンをで削除できることを知っていますrow.id。たとえば、

shp.dropI  <- shp[-i, ]
shp.subset <- shp[i %in% c(1,2,3),]

次に、特定のポリゴンを条件付きでドロップしたいとしAREA > 10ます。これをエレガントに実装するにはどうすればよいですか?私が今持っている唯一の方法は、すべての行を反復処理して対応するを見つけることrow.idです。


「エリア」属性に注意してください。実際のエリアであるという保証はありませんよね?rgeos :: gArea(x、byid = TRUE)を使用して計算でき、その計算の投影法を変更する必要がある場合はrgdal :: spTransformを使用できます。
mdsumner 2016年

@mdsumnerあなたは完全に正しいです。良い点
thekingofkings 2016年

回答:


7

まず、rgdalライブラリのreadOGRを使用してシェープファイルを読み取ることを強くお勧めします。投影情報(proj4string)を保持し、他の関数を使用して文字列を一致させるときに多くの頭痛の種を節約します。

目的を達成するための2つの簡単な方法は、インデックスを使用するか、サブセットを使用することです。これにより、面積が10未満のポリゴンが保持されます(10を超えるものを削除)。

shp.sub <- shp[shp$AREA < 10,] 
shp.sub <- subset(shp, AREA < 10)

いいね!この質問は「DataFrameでRを使用して特定の行を選択する方法」に一般化できることに気づきました。そして提案もありがとう
thekingofkings 2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.