Мне интересно, как соединить пространственные полигоны, используя код R?
Я работаю с данными переписи, где определенные области меняются с течением времени, и я хочу объединить полигоны и соответствующие данные и просто отчитываться по объединенным областям. Я веду список полигонов, которые переписывают изменения в перепись и которые я планирую объединить. Я хотел бы использовать этот список названий областей в качестве справочного списка для применения к данным переписи за разные годы.
Мне интересно, какую функцию R использовать для объединения выбранных полигонов и соответствующих данных. Я погуглил это, но просто запутался в результатах.
polygon
r
spatial-statistics
attribute-joins
census
Geoconfused
источник
источник
R
с помощьюmerge
функции.Ответы:
Следующее решение основано на посте Роджера Биванда о R-sig-Geo . Я взял его пример, заменив немецкий шейп-файл некоторыми данными переписи из Орегона, которые вы можете скачать здесь (возьмите все компоненты шейп- файла из «Графства Орегона и данные переписи»).
Начнем с загрузки необходимых пакетов и импорта шейп-файла в R.
Далее вам нужна некоторая группирующая переменная для агрегирования данных. В нашем примере группировка просто основана на координатах одного округа. См. Изображение ниже, черные границы обозначают исходные многоугольники, тогда как красные границы представляют многоугольники, сгруппированные
oregon.id
.Все идет нормально. Однако атрибуты данных, связанные с субрегионами исходного шейп-файла (например, плотность населения, площадь и т. Д.), Теряются при выполнении
unionSpatialPolygons
. Полагаю, вы хотели бы объединить данные переписи, связанные с шейп-файлом, поэтому вам потребуется промежуточный шаг.Сначала вы должны преобразовать свои полигоны в фрейм данных, чтобы выполнить агрегацию. Теперь давайте возьмем столбцы атрибутов данных с шести по восемь («AREA», «POP1990», «POP1997») и агрегируем их в соответствии с вышеуказанными идентификаторами, применяя функцию
sum
.Наконец, верните ваш фрейм данных обратно
SpatialPolygonsDataFrame
в ранее предоставленный унифицированный шейп-файл,oregon.union
и вы получите как обобщенные полигоны, так и данные вашей переписи, полученные из вышеупомянутого этапа агрегирования.источник
Вот решение с использованием пакета sf:
источник
summarise()
производных сdo_union
аргументом, как я только что сделал что-то подобноеsummarise_if(shapefile, predic.function, sum, na.rm = TRUE, do_union = TRUE)
, что в итоге также суммировало ИСТИНА в каждой ячейке (т.е. +1 для всех операций). Нужно исследовать больше, чтобы выяснить, следует ли об этом сообщать (хотя бы для дополнительного предупреждения) ...?