У меня есть две таблицы данных. Таблица с заказами клиентов (показывает идентификатор клиента и дату заказа, когда была сделана покупка) и таблица с сегментацией клиентов (показывает, в каком сегменте был классифицирован клиент за определенный период времени).
Я хочу добавить сегмент из таблицы данных 2) в качестве новой переменной в таблицу данных 1), но, конечно, во время заказа был только тот сегмент, в котором находился клиент.
Customer_Orders <- data.table(
customer_ID = c("A", "A"),
order_date = c("2017-06-30", "2019-07-30")
)
head(Customer_Orders)
customer_ID order_date
1: A 2017-06-30
2: A 2018-07-30
Customer_Segmentation <- data.table(
customer_ID = c("A", "A", "A"),
segment = c("1", "2", "3"),
valid_from = c("2017-01-01", "2018-01-01", "2019-01-01"),
valid_until = c("2017-12-31", "2018-12-31", "2019-12-31")
)
head(Customer_Segmentation)
customer_ID segment valid_from valid_until
1: A 1 2017-01-01 2017-12-31
2: A 2 2018-01-01 2018-12-31
3: A 3 2019-01-01 2019-12-31
Это результат, созданный вручную, который я ищу
Result <- data.table(
customer_ID = c("A", "A"),
order_date = c("2017-06-30", "2019-07-30"),
segment = c(1, 3)
)
head(Result)
customer_ID order_date segment
1: A 2017-06-30 1
2: A 2019-07-30 3
В настоящее время мое решение состоит в том, чтобы выполнить правое объединение, чтобы в основном добавить все возможные сегменты к каждой строке в таблице заказов клиентов, а затем исключить все строки, где дата заказа не находится между периодами сегмента. Однако, поскольку мой набор данных огромен, это действительно медленное и громоздкое решение