Sous-ensemble un SpatialPolygonsDataFrame par ID dans R?

13

J'ai utilisé la gIntersectfonction du rgeospackage pour déterminer quels polygones se croisent dans deux SpatialPolygonsDataFrames (spdfs). Le résultat est une matrice logique avec des noms de domaine comprenant les ID de polygone de sfdf # 1 et des noms de cols les ID de polygone de spdf # 2. Je voudrais utiliser cette matrice pour sous-définir les deux spdfs d'origine, en omettant les polygones qui ne se chevauchent pas, avant d'utiliser la fonction gIntersection. Je peux facilement convertir la matrice logique en deux vecteurs d'ID (un pour chaque spdf) qui représentent ces polygones avec au moins un certain chevauchement.

Ma question est - puis-je utiliser un vecteur d'ID de polygone pour sous-définir un spdf? Si tel est le cas, est-ce qu'il sous-ensemble correctement les valeurs dans l' @dataemplacement? Je sais que je peux généralement sous-définir des spdfs en utilisant cette syntaxe:

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

Cela ne fonctionnera pas pour les identifiants, car ils sont enfouis beaucoup plus profondément dans la structure de la liste spdf.

Alberto
la source

Réponses:

11

Les identifiants de matrice renvoyés par gIntersect doivent correspondre aux noms de domaine de chaque objet sp source. Vous devriez pouvoir simplement indexer la position des noms de domaine afin de sous-définir les données.

r <- c(1,5,3,9,10)
sp.polys <- sp.polys[r,]
Jeffrey Evans
la source
Je veux juste vérifier - cela fonctionnera-t-il également directement sur l'objet spdf? (c.-à-d. spdf[r, ])
Alberto
Oui, il fonctionne sur les objets sp et l'index se propage via les identifiants qui lient tous les objets slot, qui correspondent aux noms de domaine @data.
Jeffrey Evans
Peut-être que je ne lis pas correctement, mais cela semble légèrement faux? Vous devez extraire sur une chaîne r de noms de lignes, en utilisant des entiers extraira ordinairement
MichaelChirico
@MichaelChirico pour avoir renvoyé une position de ligne connue, c'est correct. Si vous ne connaissez que la valeur du (des) nom (s) de ligne, vous pouvez créer l'index à l'aide de quelque chose comme (rownames (x)% dans% c (1,5)) et, non, sauf si une vraie chaîne de caractères est affectée aux rownames que les valeurs n'ont pas besoin d'être citées. Les noms par défaut sont un vecteur cité de 1: n
Jeffrey Evans