Объединение набора пространственных точечных данных с набором пространственных данных сетки с использованием R. (Основной набор данных в формате точек SP)
Я работаю над пространственными наборами данных, используя R.
Описание данных
Мой основной набор данных находится в SpatialPointsDataFrame
формат и содержит данные о температуре поверхности (названия столбцов - "uralLSTday", "uralLSTnight") за каждый месяц. Фрагмент данных показан ниже:
Основные данные - (в формате SpatialPointsDataFrame)
TOWN_ID ruralLSTday ruralLSTnight year month
2920006.11 2920006 303.6800 289.6400 2001 0
2920019.11 2920019 302.6071 289.0357 2001 0
2920015.11 2920015 303.4167 290.2083 2001 0
3214002.11 3214002 274.9762 293.5325 2001 0
3214003.11 3214003 216.0267 293.8704 2001 0
3207010.11 3207010 232.6923 295.5429 2001 0
Координаты:
longitude latitude
2802003.11 78.10401 18.66295
2802001.11 77.89019 18.66485
2803003.11 79.14883 18.42483
2809002.11 79.55173 18.00016
2820004.11 78.86179 14.47118
Я хочу добавить столбцы в приведенные выше данные об осадках и температуре воздуха - эти данные присутствуют в SpatialGridDataFrame
в таблице "second_data" за каждый месяц. Фрагмент "second_data" показан ниже:
Вторичные данные - (в формате SpatialGridDataFrame)
month meant.69_73 rainfall.69_73
1 1 25.40968 0.6283871
2 2 26.19570 0.4580542
3 3 27.48942 1.0800000
4 4 28.21407 4.9440000
5 5 27.98987 9.3780645
Координаты:
longitude latitude
[1,] 76.5 8.5
[2,] 76.5 8.5
[3,] 76.5 8.5
[4,] 76.5 8.5
[5,] 76.5 8.5
Вопрос
Как добавить столбцы из вторичных данных в мои основные данные путем сопоставления по широте, долготе и месяцу? В настоящее время информация о широте / долготе в приведенных выше двух таблицах не будет точно совпадать, поскольку основные данные представляют собой набор точек, а вторичные данные являются сеткой.
Есть ли способ найти квадрат сетки на "Вторичных данных", в который входит широта / длина моих основных данных, и интерполировать?
1 ответ
Если твой SpatialPointsDataFrame
объект называется x
, и ваш SpatialGridDataFrame
называется y
, затем
x <- cbind(x, over(x, y))
добавит атрибуты (значения ячеек сетки) y
в соответствии с местами x
к атрибутам x
, Совпадение выполняется по ячейке точка-сетка.
Интерполяция - это другой вопрос; простым способом было бы обратное расстояние с четырьмя ближайшими соседями, например, путем
library(gstat)
x = idw(meant.69_73~1, y, x, nmax = 4)
хотите ли вы один, или другой действительно зависит от того, что означают ваши ячейки сетки: относятся ли они к (i) значению точки в центре ячейки сетки, (ii) значению, которое является постоянным по всей ячейке сетки, или (iii) среднее значение по всей ячейке сетки. Первый случай: интерполировать, второй: использовать over
, третье: использовать интерполяцию между точками (здесь не поясняется).
R пакет raster
будет предлагать аналогичную функциональность, но использовать разные имена.