如何解决使用 dplyr 计算 R 中的分组序列
我使用的数据集类似于我在下面创建的示例,其中记录了每个客户的活动:
sample_data <- data.frame(customer_id = c(1000,1000,2000,3000,4000,4000),activity_date = as.Date(c("2020-01-01","2020-01-01","2020-02-29","2020-03-01","2020-01-02","2020-03-04","2020-05-22","2020-03-05","2020-06-01"),format = "%Y-%m-%d"),activity = c("like","purchase","like","visit","email","email"))
对于我的最终数据集,我想在数据中添加两列计算出的“序列”,其中每一列表示不同类型的序列。
-
一般顺序:按
customer_id
级别分组,每个规则应连续计数。但是,发生在同一日期的规则还应指明相同的顺序,这意味着只有在日期发生变化时才会继续计数。 -
规则序列:在
customer_id
级别分组,每个单独的规则应从序列 1 开始,并根据特定规则出现的频率继续以规则为基础顾客。同样,发生在同一日期的规则应指示相同的顺序。
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,"email"),general_sequence = c(1,1,2,3,2),rule_sequence = c(1,1))
非常感谢任何帮助!谢谢!
解决方法
这将是使用 {dplyr} 和 data.table::rleid
的一种方法:
library(dplyr)
sample_data %>%
group_by(customer_id) %>%
mutate(general_sequence = data.table::rleid(activity_date)) %>%
group_by(customer_id,activity) %>%
mutate(rule_sequence = row_number())
#> # A tibble: 12 x 5
#> # Groups: customer_id,activity [9]
#> customer_id activity_date activity general_sequence rule_sequence
#> <dbl> <date> <chr> <int> <int>
#> 1 1000 2020-01-01 like 1 1
#> 2 1000 2020-01-01 purchase 1 1
#> 3 1000 2020-01-01 like 1 2
#> 4 1000 2020-01-01 visit 1 1
#> 5 1000 2020-02-29 email 2 1
#> 6 1000 2020-03-01 like 3 3
#> 7 2000 2020-01-02 purchase 1 1
#> 8 3000 2020-01-01 visit 1 1
#> 9 3000 2020-03-04 purchase 2 1
#> 10 3000 2020-05-22 visit 3 2
#> 11 4000 2020-03-05 like 1 1
#> 12 4000 2020-06-01 email 2 1
由 reprex package (v0.3.0) 于 2021 年 5 月 11 日创建
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。