Объединить пространственные полигоны с внешними данными и выбрать полигоны по атрибуту

Я пытаюсь отобразить свою изучаемую область в R. На данный момент я загрузил данные о границах открытого доступа переписи и объединил атрибутивные данные с открытым доступом, который я хочу просмотреть.
Итак, скажем, из 1000 открытых доступов. Я хочу просмотреть только 500 таких ОД, для которых у меня есть внешний набор данных. Земля — это мой фрейм данных пространственных полигонов, содержащий 1000 OA. Он имеет один столбец с именем OA «геокод». Однако у него есть свои координаты, потому что вы запускаете:

coordinates(land)

он выдает все координаты.

Цена дома — это фрейм данных, содержащий цены на жилье и столбец с геокодом.

Код для дальнего:

library("sp")
library("GISTools")
library("maptools")
library("spatial")
library("ggplot2")
library("rgdal")

land@data = merge(land@data,houseprice,by.x="geocode", 
by.y="geocode",sort=FALSE)

View(land)

это показывает, что у меня есть только 500 записей (это то, что я хочу).

plot(land)

это приводит к тому, что на графике отображаются все 1000 OA вместо 500, которые я хочу.

Что я должен сделать, чтобы отображались только 500 OA с данными? Спасибо за помощь


person wilga    schedule 19.04.2017    source источник


Ответы (1)


Вы можете использовать merge непосредственно в своих пространственных данных, поскольку для этого есть метод. Затем вы выбираете только строки, для которых нет NA в добавленном столбце (названном my_col в приведенном ниже примере).
Здесь вы изменили только таблицу атрибутов, но не геометрию

# Merge with external dataset
land2 <- merge(land, houseprice,by.x="geocode", by.y="geocode",sort=FALSE, all.x = TRUE)
# Select only rows of interest
land500 <- land2[which(!is.na(land2$my_col)),]
plot(land500)
person Sébastien Rochette    schedule 19.04.2017
comment
К сожалению, это все еще не удаляет пустые полигоны. plot(land500) #это по-прежнему отображает все полигоны Любая дополнительная помощь? - person wilga; 21.04.2017
comment
Без ваших данных или воспроизводимого примера я не могу сделать больше - person Sébastien Rochette; 21.04.2017
comment
когда вы делаете land2 из своего примера, он создает фрейм данных, а не остается фреймом данных пространственных полигонов. Вы знаете способ обойти это? - person wilga; 21.04.2017
comment
Если земля является SpatialPolygonDataFrame, то земля2 также должна быть единицей. Чтобы убедиться, что вы используете правильное слияние, используйте sp::merge - person Sébastien Rochette; 21.04.2017