У меня есть вопрос относительно пространственной агрегации в R. Что я пытаюсь сделать, это агрегировать точечный набор данных в сетку. Однако я не уверен, как это сделать, поскольку у меня мало опыта с подобными вещами. Я надеялся, что у кого-нибудь из вас может быть полезное руководство / возможное решение.
Моя точка зрения - это набор данных, содержащий данные с географической привязкой о конфликтных событиях в Африке (см. Www.acleddata.com). Точки имеют географическую привязку с координатами широты / долготы и содержат данные о типе и времени события. То, что я хочу сделать, это объединить эти точки в сетку 1x1 градусов.
Таким образом, ячейка сетки должна содержать информацию о точках данных, если событие произошло в этой ячейке сетки. Конечным продуктом этого должен быть фрейм данных или что-то, что я могу экспортировать в CSV-файл, так как данные предназначены для использования в наборе данных панели для статистического анализа.
До сих пор я загружал и наносил на график данные и шейп-файл, используя код ниже. Я считаю, что я должен использовать функцию over из пакета sp для агрегирования, но я не знаю как. Надеюсь, один из вас может помочь.
Код , который я использовал до сих пор можно найти здесь с соответствующим визуальным результатом более чем там .
Предложение для этого в QGIS также приветствуется.
источник
Ответы:
Загруженные данные содержат некоторые откровенные ошибки местоположения, поэтому первое, что нужно сделать, это ограничить координаты разумными значениями:
Вычисление координат и идентификаторов ячеек сетки - это просто усечение десятичных знаков из значений широты и долготы. (В более общем случае для произвольных растров сначала отцентрируйте и масштабируйте их до единичного размера ячейки, урежьте десятичные дроби, а затем измените масштаб и верните их в исходное положение, как показано в коде
ji
ниже.) Мы можем объединить эти координаты в уникальные идентификаторы, прикрепив их к входному фрейму данных, и запишите дополненный фрейм данных в виде файла CSV. Там будет одна запись на точку:Вместо этого вы могли бы хотеть вывод, который суммирует события в каждой ячейке сетки. Чтобы проиллюстрировать это, давайте посчитаем количество на ячейку и выведем по одной записи на ячейку:
Для других сводок измените
function
аргумент в вычисленииcounts
. (В качестве альтернативы используйте электронную таблицу или программное обеспечение базы данных, чтобы суммировать первый выходной файл по идентификатору ячейки.)В качестве проверки давайте сопоставим счетчики, используя центры сетки, чтобы найти символы карты. (Точки, расположенные в Средиземном море, Европе и Атлантическом океане, имеют подозрительные местоположения: я подозреваю, что многие из них являются результатом смешения широты и долготы в процессе ввода данных.)
Этот рабочий процесс сейчас
Тщательно документировано (посредством самого
R
кода),Воспроизводимый (путем повторного запуска этого кода),
Расширяемый (изменяя код очевидными способами), и
Разумно быстро (вся операция занимает менее 10 секунд для обработки этих 53052 наблюдений).
источник
Ну, что вам нужно, так это базовое так называемое «Пространственное соединение», которое сопоставляет два шейп-файла друг с другом и распределяет сумму (число счетчиков) в результирующей таблице атрибутов. Если вы ищете «Пространственное соединение в R», вы найдете множество примеров даже здесь, на GIS.Stackexchange. Я быстро погуглил и нашел, например, этот код, размещенный в списке рассылки.
Если вы хотите добиться объединения пространственных атрибутов в QGIS, выполните следующие действия:
Если соединение как-то не получается (у меня не работает каждый раз), тогда придерживайтесь SEXTANTE и ищите набор инструментов SAGA, который также имеет очень хорошие функции соединения.
источник
R
превосходят в. Использование шейп-файлов,rgdal
QGIS и Sextante - это все равно, что рекомендовать кому-то арендовать современное автоматизированное промышленное предприятие, чтобы склеить две доски :-).