【发布时间】:2023-03-19 00:06:02
【问题描述】:
我有两个数据表,其中包含 x,y 坐标和其他一些我想根据最近邻距离合并的信息,即 x 和 y 的平方差的最小值 (dx_i =min ([(x_i- x_j)^2+(y_i-y_j)^2]^0.5). 假设我有以下两组:
DT1=data.table(x=1:5,y=3:7)
DT2=data.table(x=c(2,4,2,3,6),y=c(2.5,3.1,2,3,5),Q=c('a','b','c','d','e'))
那么合并的期望结果是:
x y Q
1: 1 3 a
2: 2 4 d
3: 3 5 d
4: 4 6 e
5: 5 7 e
我当然可以在 DT1 上编写一个循环来计算 DT1 中每一行的最近邻居,然后根据该计算进行合并,但这似乎违背了数据表的目的。此外,对于几百万行的数据表,这将非常缓慢。
我知道对于单个列,我可以像这样进行最近邻合并
DT2[DT1,roll="nearest"]
但是当我为要合并的表定义 2 个键(x 和 y)时,这(逻辑上)不起作用。是否存在用于 2 参数最近邻合并的类似语法?如果没有,有没有更聪明的方法来做到这一点,然后只是循环,就像我提到的那样?
【问题讨论】:
-
之所以只对 1 列进行,是因为对于 1 列,您可以在两个表中对其进行排序,从而可以轻松进行滚动合并。对于 2 列或更多列,您不能这样做(没有排序顺序),这是一种全新的操作类型。
-
@eddi 是的,我知道该操作将属于不同类型。我只是想知道这种(我认为常见的)合并类型是否以某种聪明的方式实现
-
我并没有想太多——但如果你想出一个聪明的算法来做这件事,你当然可以在 github 上添加建议或拉取请求。
标签: r merge data.table