У нас есть два кадра данных: первый с датами эфирной рекламы для набора продуктов и второй с датами продаж для одного и того же набора продуктов.
Мы хотели бы прикрепить для каждого объявления каждого продукта, ближайшая продажа, ПОСЛЕ объявления.
Вот код для входных данных:
original_table = data.table(article = c('A','A','A','B','B','B','B'),
date_ad = as.Date(c('2010-04-09','2011-07-12','2012-05-22','2011-07-12','2014-02-02','2015-04-13','2016-08-12'),))
> original_table
article date_ad
1: A 2010-04-09
2: A 2011-07-12
3: A 2012-05-22
4: B 2011-07-12
5: B 2014-02-02
6: B 2015-04-13
7: B 2016-08-12
table_to_join = data.table(article = c('A','A','B','B','B'),
date_sale = as.Date(c('2010-12-15','2012-08-20','2013-12-01','2016-01-05','2017-01-20'),))
> table_to_join
article date_sale
1: A 2010-12-15
2: A 2012-08-20
3: B 2013-12-01
4: B 2016-01-05
5: B 2017-01-20
После присоединения дат из второй таблицы к датам в первой, выходные данные должны иметь следующий формат:
> result
article date_ad date_sale
1: A 2010-04-09 2010-12-15
2: A 2011-07-12 2012-08-20
3: A 2012-05-22 2012-08-20
4: B 2011-07-12 2013-12-01
5: B 2014-02-02 2016-01-05
6: B 2015-04-13 2016-01-05
7: B 2016-08-12 2017-01-20
PS: original_table
может содержать намного больше строк, чем table_to_join
для каждой статьи. Несколько строк в original_table
могут быть связаны с одной строкой из table_to_join
.
Как мы можем получить это эффективным способом?