使用R语言dplyr包计算客户行为分组序列的问题求助
R客户行为序列计算解决方案
核心使用dplyr内置的dense_rank()函数实现需求,该函数会为相同取值分配相同排名,且排名连续递增,刚好匹配两类序列的计算逻辑。
完整实现代码
library(dplyr) result <- sample_data %>% # 先按日期全局排序,保证序列严格按时间顺序递增 arrange(activity_date) %>% # 计算通用序列:按客户分组,对日期做稠密排名 group_by(customer_id) %>% mutate(general_sequence = dense_rank(activity_date)) %>% ungroup() %>% # 计算规则序列:按客户+行为类型分组,对日期做稠密排名 group_by(customer_id, activity) %>% mutate(rule_sequence = dense_rank(activity_date)) %>% ungroup()
逻辑说明
- 原代码使用
1:n()按行号计数,导致同一天的多条记录拿到不同序列值,替换为dense_rank(activity_date)后,同一分组下相同日期的记录会分配相同序列值,仅当日期变更时序列值+1,符合通用序列的要求。 - 规则序列仅需要调整分组维度为
customer_id + activity,复用dense_rank()对日期排名即可,同一客户同一行为下相同日期对应相同序列值,出现新日期时序列自动递增。
最终输出的result与需求描述的计算逻辑完全匹配。
内容的提问来源于stack exchange,提问作者emil_rore
相关产品推荐
相关产品推荐

