У меня есть df
, идентифицирующий пользователей и их повторяющиеся транзакции в бизнес-модели на основе подписки, где транзакции могут происходить в месячном, 3-месячном или 6-месячном цикле (каждые 30, 90, 180 дней соответственно).
library(tidyverse)
df <- tibble::tribble(
~user_id, ~date, ~plan, ~order_type,
1, "12/23/2018", "monthly", "acquisition",
1, "1/22/2019", "monthly", "repeat",
1, "2/21/2019", "3-months", "repeat",
1, "5/22/2019", "3-months", "repeat",
1, "8/20/2019", "3-months", "repeat",
2, "5/18/2019", "monthly", "acquisition",
2, "6/17/2019", "monthly", "repeat",
2, "7/17/2019", "monthly", "repeat",
3, "9/14/2018", "monthly", "acquisition",
3, "10/14/2018", "6-months", "repeat",
3, "4/12/2019", "6-months", "repeat",
4, "9/14/2018", "3-months", "acquisition",
4, "12/13/2018", "monthly", "repeat",
4, "1/12/2019", "monthly", "repeat"
)
Каждый клиент (идентифицируемый с уникальным user_id
) может свободно начинать с любого из этих «планов» и в течение своей подписки может переходить с одного плана на другой.
Моя цель состоит в том, чтобы определить с предпочтением решений Dplyr:
- Обновления пользователя (а именно, его / его первый заказ (= приобретение) - «ежемесячный», но последующие либо «3 месяца», либо «6 месяцев»)
- Понижение рейтинга пользователя (а именно, его / его первый заказ (= приобретение) составляет «3 месяца» или «6 месяцев», но последующие "ежемесячно")
Мой желаемый результат:
df_output <- tibble::tribble(
~user_id, ~date, ~plan, ~order_type, ~behavior_type,
1, "12/23/2018", "monthly", "acquisition", "-",
1, "1/22/2019", "monthly", "repeat", "-",
1, "2/21/2019", "3-months", "repeat", "upgrade",
1, "5/22/2019", "3-months", "repeat", "-",
1, "8/20/2019", "3-months", "repeat", "-",
2, "5/18/2019", "monthly", "acquisition", "-",
2, "6/17/2019", "monthly", "repeat", "-",
2, "7/17/2019", "monthly", "repeat", "-",
3, "9/14/2018", "monthly", "acquisition", "-",
3, "10/14/2018", "6-months", "repeat", "upgrade",
3, "4/12/2019", "6-months", "repeat", "-",
4, "9/14/2018", "3-months", "acquisition", "-",
4, "12/13/2018", "monthly", "repeat", "downgrade",
4, "1/12/2019", "monthly", "repeat", "-"
)