Объединить набор пространственных точечных данных с набором данных пространственной сетки с помощью R. (Основной набор данных находится в формате SP Points)

Я работаю над наборами пространственных данных, используя R.

Описание данных

Мой основной набор данных находится в формате SpatialPointsDataFrame и содержит данные о температуре поверхности (названия столбцов - «сельскийLSTдень», «сельскийLSTночь») за каждый месяц. Фрагмент данных показан ниже:

Основные данные - (в формате 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 в таблице «secondary_data» за каждый месяц. Фрагмент "secondary_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

Вопрос

Как мне добавить столбцы из вторичных данных в мои основные данные, сопоставив по широте, долготе и месяцу? В настоящее время информация о широте и долготе в двух приведенных выше таблицах не будет точно совпадать, поскольку основные данные представляют собой набор точек, а вторичные данные представляют собой сетку.

Есть ли способ найти квадрат сетки на «Вторичных данных», в который попадают широта / долгота моих основных данных, и интерполировать?


person sv_noname    schedule 16.07.2015    source источник
comment
Как вы сопоставите их, если долготы не совпадают? Есть ли идея (скажем) найти квадрат сетки на ваших вторичных данных, в который попадают широта / долгота, и интерполировать?   -  person mathematical.coffee    schedule 16.07.2015
comment
Да, именно этим я и хочу заниматься. Как лучше всего это сделать?   -  person sv_noname    schedule 16.07.2015
comment
Вам нужно будет привести небольшой воспроизводимый пример (мы не можем получить широту и долготу предоставленных вами данных, а месяц в ваших основных данных не совпадает ни с одним из месяцев в ваших дополнительных данных)   -  person mathematical.coffee    schedule 16.07.2015
comment
Это всего лишь фрагмент, месяцы в обоих наборах данных варьируются от 0 до 11. Мой набор данных довольно большой   -  person sv_noname    schedule 16.07.2015
comment
Я добавил координаты в вопросе выше. Это поможет?   -  person sv_noname    schedule 16.07.2015
comment
Взгляните на sp::over. Одна из поддерживаемых комбинаций параметров - x = "SpatialPoints", y = "SpatialGridDataFrame"   -  person hrbrmstr    schedule 16.07.2015


Ответы (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 будет предлагать аналогичные функции, но использовать другие имена.

person Edzer Pebesma    schedule 16.07.2015
comment
Спасибо, Эдзер, это было очень полезно. Мои ячейки сетки относятся к (i) значению точки в центре сетки. - person sv_noname; 16.07.2015