У меня есть два набора данных.
Образец 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
Меня интересует результат, в котором set_B
строки из set_A
соответствуют ближайшим значениям time_a
и time_b
(общее количество выходных строк: 4798). В set_A
значения time_a
могут повторяться несколько раз (например, ID_a[8,]
и [ID_a[9,]
) - на самом деле не имеет значения, какая строка будет объединена со строкой из set_B
(в данном случае ID_b[1,]
). Пример ожидаемого результата:
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
).
Я бы очень оценил вашу помощь!