1. ホーム
  2. r

RでSpatialPolygonsDataFrameを属性でサブセットする(ポリゴンを削除する)簡単な方法

2023-09-03 23:02:30

質問

SpatialPolygonsDataFrame オブジェクトから、@data データフレームの対応する属性値に基づいていくつかのポリゴンを削除し、簡略化/サブセットされたシェイプファイルを作成できるようにしたいのですが、その方法はありますか。 今のところ、これを行う方法は見つかっていません。

例えば、以下のデータからすべてのポリゴンを削除したいとします。 ワールドシェープファイル から、面積が 30000 未満のポリゴンをすべて削除したいとします。 この場合、どのようにすればよいのでしょうか。

あるいは、同様に、Antarticaを削除するにはどうしたらよいでしょうか?

require(maptools)

getinfo.shape("TM_WORLD_BORDERS_SIMPL-0.3.shp") 
# Shapefile type: Polygon, (5), # of Shapes: 246
world.map <- readShapeSpatial("TM_WORLD_BORDERS_SIMPL-0.3.shp")

class(world.map)
# [1] "SpatialPolygonsDataFrame"
# attr(,"package")
# [1] "sp"

head(world.map@data)
#   FIPS ISO2 ISO3 UN                NAME   AREA  POP2005 REGION SUBREGION     LON     LAT
# 0   AC   AG  ATG 28 Antigua and Barbuda     44    83039     19        29 -61.783  17.078
# 1   AG   DZ  DZA 12             Algeria 238174 32854159      2        15   2.632  28.163
# 2   AJ   AZ  AZE 31          Azerbaijan   8260  8352021    142       145  47.395  40.430
# 3   AL   AL  ALB  8             Albania   2740  3153731    150        39  20.068  41.143
# 4   AM   AM  ARM 51             Armenia   2820  3017661    142       145  44.563  40.534
# 5   AO   AO  AGO 24              Angola 124670 16095214      2        17  17.544 -12.296

このようにすると、プロットに変化が反映されません。

world.map@data = world.map@data[world.map@data$AREA > 30000,]
plot(world.map)

とやっても同じ結果になります。

world.map@data = world.map@data[world.map@data$NAME != "Antarctica",]
plot(world.map)

どんな助けでも感謝します!

どのように解決するのですか?

は、データを上書きしているように見えますが、ポリゴンを削除しているわけではありません。データとポリゴンの両方を含むデータセットを切り出したい場合は、以下のようにします。

world.map <- world.map[world.map$AREA > 30000,]
plot(world.map)

[2016年4月19日編集]]です。 その解決策は以前はうまくいっていましたが、@Bonnieは新しいRのバージョンでそうでないと報告しています(おそらくデータも変わったのでしょうが)。 world.map <- world.map[world.map@data$AREA > 30000, ] もしそれが役に立ったのなら、@Bonnie の回答をアップヴォートしてください。