【发布时间】:2021-05-11 08:53:37
【问题描述】:
我正在使用类似于我在下面创建的示例的数据集,其中记录了每个客户的活动:
sample_data <- data.frame(customer_id = c(1000, 1000,1000, 1000,1000, 1000, 2000, 3000,3000,3000, 4000,4000),
activity_date = as.Date(c("2020-01-01", "2020-01-01", "2020-01-01", "2020-01-01", "2020-02-29", "2020-03-01", "2020-01-02", "2020-01-01", "2020-03-04", "2020-05-22", "2020-03-05", "2020-06-01"), format = "%Y-%m-%d"),
activity = c("like", "purchase", "like", "visit", "email", "like", "purchase", "visit", "purchase", "visit", "like", "email"))
对于我的最终数据集,我想在数据中添加两列计算出的“序列”,其中每一列表示不同类型的序列。
-
一般顺序:按
customer_id级别分组,每条规则应连续计数。但是,发生在同一日期的规则也应该表明相同的顺序,这意味着只有在日期发生变化时才会继续计数。 -
规则序列:按
customer_id级别分组,每个单独的规则应从序列 1 开始并继续基于规则计数,具体取决于特定规则在每个客户中出现的频率。同样,发生在同一日期的规则应指示相同的顺序。
到目前为止,我已经想出了以下dplyr 代码,它有两个问题:
test_result <- sample_data %>%
dplyr::group_by(customer_id) %>%
dplyr::arrange(activity_date) %>%
dplyr::mutate(general_sequence=1:n()) %>% dplyr::ungroup()
- 在同一日期跟踪的规则没有相同的顺序。正如您在
test_result中看到的那样,计数从 1 开始并继续计数,即使在同一天跟踪了规则。 - 我根本没有计算出“规则序列”列。我假设我需要应用不同的分组才能获得结果(可能基于“规则”?)
为了更清楚起见,我创建了一个表格,显示我希望最终结果的样子:
final_data <- data.frame(customer_id = c(1000, 1000,1000, 1000,1000, 1000, 2000, 3000,3000,3000, 4000,4000),
activity_date = as.Date(c("2020-01-01", "2020-01-01", "2020-01-01", "2020-01-01", "2020-02-29", "2020-03-01", "2020-01-02", "2020-01-01", "2020-03-04", "2020-05-22", "2020-03-05", "2020-06-01"), format = "%Y-%m-%d"),
activity = c("like", "purchase", "like", "visit", "purchase", "like", "purchase", "visit", "purchase", "visit", "like", "email"),
general_sequence = c(1, 1, 1, 1, 2, 3, 1, 1, 2, 3, 1, 2),
rule_sequence = c(1, 1, 2, 1, 2, 3, 1, 1, 1, 2, 1, 1))
非常感谢任何帮助!谢谢!
【问题讨论】:
-
你的
sample_data和final_data没有相同的activity列,rule_sequance在同一日期更改相同活动的值,这是你说你不想要的? -
你能解释一下你的规则顺序吗?我没明白。
continue counting on a rule-basis, depending on how often the specific rule appears per customer中的规则是什么?
标签: r dataframe date dplyr sequence