Mic*_*iel 7 merge r data.table
我有两个数据表,其中包含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'))
Run Code Online (Sandbox Code Playgroud)
那么合并的期望结果将是:
x y Q
1: 1 3 a
2: 2 4 d
3: 3 5 d
4: 4 6 e
5: 5 7 e
Run Code Online (Sandbox Code Playgroud)
我当然可以在DT1上编写一个循环来计算DT1中每行的最近邻居,然后根据这个计算进行合并,但这似乎打败了数据表的目的.而且,对于数百万行的数据表来说,这将是非常慢的.
我知道对于单个列我可以像这样做最近邻居合并
DT2[DT1,roll="nearest"]
Run Code Online (Sandbox Code Playgroud)
但是,当我为要合并的表定义2个键(x和y)时,(逻辑上)不起作用.是否存在2参数最近邻居合并的类似语法?如果没有,是否有更聪明的方法来做这个然后循环,就像我提到的那样?
一种可能的解决方案:
func = function(u,v)
{
vec = with(DT2, (u-x)^2 + (v-y)^2)
DT2[which.min(vec),]$Q
}
transform(DT1, Q=apply(DT1, 1, function(u) func(u[1], u[2])))
# x y Q
#1: 1 3 a
#2: 2 4 d
#3: 3 5 d
#4: 4 6 e
#5: 5 7 e
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
762 次 |
| 最近记录: |