назначить точки для сетки в т - PullRequest
0 голосов
/ 08 июня 2018

У меня есть (надеюсь) простая задача, которую мне нужно выполнить, но до сих пор я не смог найти свой ответ ни в одной из существующих тем.

Допустим, у меня есть набор координат, которые соответствуют центрам ячеек сетки 10x10.Каждая ячейка сетки имеет уникальный идентификатор (a, b, c, d).

    x   y
a   5   5
b   5   15
c   5   25
d   5   35
e   15  5
f   15  15

(и т. Д.)

У меня также есть набор координат «станции», которые соответствуютнекоторые пространственные точки, лежащие где-то на этой сетке

    x       y
A   7.5     12
B   33.2    21
C   12      16.6

(и т. д.)

Я хочу создать таблицу, в которой будет указано, какая ячейка сетки (a, b, c) каждая«станций» (A, B, C) принадлежит.

Есть ли (относительно) простой способ сделать это в R?

Пример изображения

1 Ответ

0 голосов
/ 08 июня 2018

Копирование данных данных.Если они уже существуют как data.frames, вам нужно запустить следующее, чтобы мой код работал: setDT(df) setDT(stations) (Преобразует их в класс data.table)

library(data.table)
df <- fread("
grid    x   y
a   5   5
b   5   15
c   5   25
d   5   35
e   15  5
f   15  15
")

stations <- fread("
station    x       y
A   7.5     12
B   33.2    21
C   12      16.6
")

Создайте таблицу данныхс границами каждой сетки

bounds <- df[, .(xl = x - 5, xu = x + 5
                , yl = y - 5, yu = y + 5
                , grid )]
bounds
#    xl xu yl yu grid
# 1:  0 10  0 10    a
# 2:  0 10 10 20    b
# 3:  0 10 20 30    c
# 4:  0 10 30 40    d
# 5: 10 20  0 10    e
# 6: 10 20 10 20    f

Присоединяйтесь bounds и stations

out <- bounds[stations, .(station, grid), 
                on = .(xl <= x, xu >= x,  yl <= y, yu >= y)]
out
#    station grid
# 1:       A    b
# 2:       B <NA>
# 3:       C    f
...