RのIDでSpatialPolygonsDataFrameをサブセットしますか?


13

パッケージのgIntersect関数を使用してrgeos、2つのSpatialPolygonsDataFrames(spdf)で交差するポリゴンを特定しました。結果は、sfdf#1のポリゴンIDを含む行名と、spdf#2のポリゴンIDを列名する論理行列です。この行列を使用して、関数を使用する前に、2つの元のspdfをサブセット化し、重複のないポリゴンを省略したいと思いますgIntersection。論理マトリックスを、少なくともいくつかのオーバーラップがあるポリゴンを表すIDの2つのベクトル(spdfごとに1つ)に簡単に変換できます。

私の質問は-ポリゴンIDのベクトルを使用してspdfをサブセットできますか?もしそうなら、それは@dataスロットの値を正しくサブセットしますか?私は一般的にこの構文を使用してspdfをサブセット化できることを知っています:

spdf[spdf@data$myVariable[someVector], ]

これはIDには機能しません。IDがspdfリスト構造の奥深くに埋まっているためです。

回答:


11

gIntersectから返されるマトリックスIDは、各ソースspオブジェクトの行名に対応する必要があります。データをサブセット化するために、行名の位置にインデックスを付けることができるはずです。

r <- c(1,5,3,9,10)
sp.polys <- sp.polys[r,]

確認したいだけです-これはspdfオブジェクトでも直接動作しますか?(つまり、spdf[r, ]
アルベルト

はい、spオブジェクトで機能し、@ data行名に対応するすべてのスロットオブジェクトをリンクするIDを介してインデックスが伝播します。
ジェフリーエヴァンス

正しく読んでいないのかもしれませんが、これは少し間違っているように見えますか?行名の文字列 rで抽出する必要があります。整数を使用すると通常抽出されます
MichaelChirico

@MichaelChiricoは既知の行位置を返すため、これは正しいです。行名の値しかわからない場合、which(rownames(x)%in%c(1,5))のようなものを使用してインデックスを作成できますが、行名に真の文字列が割り当てられている場合を除きます値を引用符で囲む必要はありません。デフォルトのrownamesは1の引用されたベクトルです:N
ジェフリー・エヴァンス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.