将点分配给r中的网格

时间:2018-06-08 17:40:09

标签: r geospatial spatial

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

假设我有一组坐标,对应于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中有(相对)简单的方法吗?

Example image

1 个答案:

答案 0 :(得分:0)

复制有问题的数据。如果这些已作为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

加入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