Как сделать фильтрацию объединения по датам в R? - PullRequest
0 голосов
/ 03 июля 2018

У меня есть одна таблица с тремя столбцами: контракты, дата и стоимость контракта на эту дату.

Я хочу присоединить это к другой таблице, которая также имеет контракты и даты. Ключом будут контракты. Однако столбцы дат в каждой таблице очень редко выстраиваются один в один. Как я могу сохранить столбец даты в последней таблице и использовать стоимость фонда контракта на дату, ближайшую к этой дате?

Грязное решение - сделать декартово произведение, а затем отфильтровать важную дату по другим датам, которые у меня есть. Тем не менее, это будет дорогостоящим для меня, поскольку в первой таблице содержится 42 миллиона строк и во второй таблице только около 4000 строк. Поэтому я думал о реализации фильтрующего объединения с использованием дат во второй таблице

first <- tibble(contract = c(123124,1321412,312312),
                date = c(2016-02-09, 2016-03-09, 2014-01-08),
                value = c(20210, 34324, 31231))
second <- tibble(contract = c(123124, 1321412, 312312),
                 date = c(2015-03-09, 2014-03-09, 2014-01-08))
# if I join by contract key I think I could then filter doing something like this to get contract value at a time a month ahead or behind to get a reasonable approximation.
joined 'pipe'
  filter((date.x + 30) < date.y, (date.x - 30) > date.y))
# but this would be inefficient. is there a better solution?
...