【发布时间】:2019-01-02 21:35:52
【问题描述】:
我有两组数据。
set_A 的样本(总行数:45467):
ID_a a1 a2 a3 time_a
2 35694 5245.2 301.6053 00.00944
3 85694 9278.9 301.6051 23.00972
4 65694 9375.2 301.6049 22.00972
5 85653 4375.5 301.6047 19.00972
6 12694 5236.3 301.6045 22.00972
7 85697 5345.2 301.6043 21.00972
8 85640 5274.1 301.6041 20.01000
9 30694 5279.0 301.6039 20.01000
set_B 的样本(总行数:4798):
ID_b b1 b2 source time_b
2 34.20 15.114 set1.csv.1 20.35750
7 67.20 16.114 set1.csv.2 21.35778
12 12.20 33.114 set1.csv.3 22.35806
17 73.20 67.114 set2.csv.1 23.35833
23 88.20 42.114 set2.csv.2 19.35861
28 90.20 52.114 set3.csv.1 00.35889
我对@987654325@ 的结果感兴趣,来自set_A 的行与time_a 和time_b 的最接近值匹配(输出行总数:4798)。在set_A 中,time_a 的值可以重复多次(例如,ID_a[8,] 和 [ID_a[9,]) - 哪一行将与来自set_B 的行合并并不重要(在这种情况下为@987654334 @)。预期结果示例:
ID_b b1 b2 source time_b ID_a a1 a2 a3 time_a
2 34.20 15.114 set1.csv.1 20.35750 8 85640 5274.1 301.6041 20.01000
7 67.20 16.114 set1.csv.2 21.35778 7 85697 5345.2 301.6043 21.00972
12 12.20 33.114 set1.csv.3 22.35806 4 65694 9375.2 301.6049 22.00972
17 73.20 67.114 set2.csv.1 23.35833 3 85694 9278.9 301.6051 23.00972
23 88.20 42.114 set2.csv.2 19.35861 5 85653 4375.5 301.6047 19.00972
28 90.20 52.114 set3.csv.1 00.35889 2 35694 5245.2 301.6053 00.00944
我在 stackoverflow 上遇到了许多类似的问题,我真的很喜欢 data.table 库代码,因为它们看起来非常优雅。但是,我进行了几次失败的尝试,我收到了一个基于两组构建的表(总行数 45467)或仅将一列 time_a 合并到 set_B... 不过,我不会挑剔如果有人有其他想法,我将非常感谢您的帮助。
我正在处理的代码示例:
setDT(set_B)
setDT(set_A)
setkey(set_B, time_b) [, time_a:=time_b]
test_ab <- set_B[set_A, roll='nearest']
因此,我不仅收到了一个包含应该忽略的数据的表,而且还收到了列名中的“一团糟”(例如,包含ID_a 值的列称为time_a)。
我真的很感谢你的帮助!
【问题讨论】:
标签: r merge data.table