У меня есть две таблицы для объединения на основе полей даты и времени.Чтобы воссоздать сценарий, давайте возьмем пример рекламы против продажи.Мы хотим знать, какая продажа связана с какой рекламой.
Продажа может быть помечена только для последней рекламы и только в том случае, если она произошла после рекламы.
Кроме того, если продажа произошла после несколькихрекламные ролики, мы можем пометить продажу только последним рекламным роликом;предыдущие объявления будут иметь нулевое значение в соединении.
Я не могу получить эту последнюю часть.Если после нескольких рекламных роликов происходит продажа, то все такие рекламные объявления объединяются с этой продажей;который я не хочу.В моем примере продажа, которая произошла в «2017-01-01 02:05:00», должна объединяться с рекламой, которая транслировалась в «2017-01-01 02:00:00», а не с предыдущими рекламными роликами.
вывод кода
library(lubridate)
library(data.table)
ts <- seq(as.POSIXct("2017-01-01", tz = "UTC"),
as.POSIXct("2017-01-02", tz = "UTC"),
by = "30 min")
commercial <-
data.table(
c_row_number = 1:10,
c_time = ts[1:10],
c_time_roll = ts[1:10]
)
sale <-
data.table(
s_row_number = 1:4,
s_time = ts[5:8] + minutes(5),
s_time_roll = ts[5:8] + minutes(5)
)
setkey(commercial, c_time_roll)
setkey(sale, s_time_roll)
tbl_joined <- sale[commercial, roll = -Inf] # , mult = 'last']
Любая идея, как мы можем получить NA, где c_row_number равен 1, 2, 3 и 4. Спасибо.