Подмножество SpatialPolygonsDataFrame идентификатором в R?

13

Я использовал gIntersectфункцию из rgeosпакета, чтобы определить, какие полигоны пересекаются в двух SpatialPolygonsDataFrames (spdfs). В результате получается логическая матрица с именами строк, состоящими из идентификаторов многоугольников из sfdf # 1, и именами столбцов из spdf # 2. Я хотел бы использовать эту матрицу для подмножества двух исходных spdf, исключая те многоугольники, которые не перекрываются, перед использованием функции gIntersection. Я могу легко преобразовать логическую матрицу в два вектора идентификаторов (по одному для каждого spdf), которые представляют те многоугольники, по крайней мере, с некоторым перекрытием.

Мой вопрос - могу ли я использовать вектор идентификаторов полигонов для поднабора spdf? Если это так, правильно ли он поднабор значений в @dataслоте? Я знаю, что я обычно могу поднабор spdfs, используя этот синтаксис:

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

Это не будет работать для идентификаторов, так как они скрыты в структуре списка spdf.

Alberto
источник

Ответы:

11

Идентификаторы матрицы, возвращаемые из gIntersect, должны соответствовать именам строк в каждом исходном объекте sp. Вы должны быть в состоянии просто индексировать положение имен строк, чтобы подмножество данных.

r <- c(1,5,3,9,10)
sp.polys <- sp.polys[r,]
Джеффри Эванс
источник
Я просто хочу проверить - это также будет работать непосредственно на объекте spdf? (то есть spdf[r, ])
Альберто
Да, он работает с объектами sp, и индекс распространяется через идентификаторы, которые связывают все объекты слотов, которые соответствуют именам строк @data.
Джеффри Эванс
Может быть, я не правильно читаю, но это выглядит немного неправильно? Вы должны извлечь на строку r имен строк, используя целые извлечет ординально
MichaelChirico
@MichaelChirico за возвращение известной позиции строки, это правильно. Если вы знаете только значение имени (ей) строк, то вы можете создать индекс, используя что-то вроде which (rownames (x)% in% c (1,5)) и no, если для имен строк не назначена истинная символьная строка чем значения не должны быть указаны. Имена строк по умолчанию представляют собой вектор в кавычках 1: n
Джеффри Эванс,