Simultaneous fuzzy and non-fuzzy join

痴心易碎 提交于 2019-12-01 10:56:40

In my opinion the package is best suited for this job:

library(data.table)
setDT(df)
setDT(df_alt)

df_alt[df
       , on = .(ID, loc)
       , roll = "nearest"
       , .(ID, loc.x = i.loc, loc.y = x.loc, value, delta = abs(i.loc - x.loc))]

which gives:

    ID loc.x loc.y     value delta
 1:  1    10     7 0.8744985     3
 2:  1    20     7 0.8744985    13
 3:  1    30    36 0.4724253     6
 4:  1    40    38 0.2016645     2
 5:  1    50    53 0.4750352     3
 6:  1    60    53 0.4750352     7
 7:  1    70    72 0.4750352     2
 8:  1    80    74 0.4724253     6
 9:  1    90    92 0.3202490     2
10:  1   100    95 0.2016645     5
11:  2    10    10 0.2016645     0
12:  2    20    25 0.3202490     5
13:  2    30    31 0.2016645     1
14:  2    40    31 0.2016645     9
15:  2    50    52 0.8744985     2
16:  2    60    60 0.4724253     0
17:  2    70    62 0.4750352     8
18:  2    80    87 0.4750352     7
19:  2    90    87 0.4750352     3
20:  2   100    87 0.4750352    13
21:  3    10     7 0.8744985     3
22:  3    20     7 0.8744985    13
23:  3    30    36 0.4724253     6
24:  3    40    38 0.2016645     2
25:  3    50    51 0.2016645     1
26:  3    60    53 0.4750352     7
27:  3    70    53 0.4750352    17
28:  3    80    87 0.3202490     7
29:  3    90    91 0.8744985     1
30:  3   100    91 0.8744985     9
31:  4    10    10 0.2016645     0
32:  4    20    11 0.8744985     9
33:  4    30    11 0.8744985    19
34:  4    40    61 0.3202490    21
35:  4    50    61 0.3202490    11
36:  4    60    61 0.3202490     1
37:  4    70    72 0.4750352     2
38:  4    80    74 0.4724253     6
39:  4    90    92 0.3202490     2
40:  4   100    95 0.2016645     5
41:  5    10     3 0.3202490     7
42:  5    20    25 0.3202490     5
43:  5    30    31 0.2016645     1
44:  5    40    43 0.4724253     3
45:  5    50    51 0.2016645     1
46:  5    60    60 0.4724253     0
47:  5    70    62 0.4750352     8
48:  5    80    91 0.8744985    11
49:  5    90    91 0.8744985     1
50:  5   100    91 0.8744985     9
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!