将点分配给 r 中的网格

assign points to a grid in r

我有一个(希望如此)简单的任务需要完成,但到目前为止我还没有能够在任何现有线程中找到我的答案。

比方说,我有一组坐标对应于 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

(以此类推)

我想创建一个 table 来告诉我每个“站点”(A、B、C)属于哪个网格单元(a、b、c)。

在 R 中有(相对)简单的方法来做到这一点吗?

Example image

复制有问题的数据。如果这些已经作为 data.frames 存在,您需要 运行 以下内容才能使我的代码正常工作:setDT(df) setDT(stations)(将它们转换为 data.table class)

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
")

用每个网格的边界制作数据table

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

加入boundsstations

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