R语言基于两列填充Activity列及连续去重方法
R语言实现用户访问路径Activity列生成方案
核心使用dplyr包完成分组排序、滞后值计算、连续重复值去重操作,全程按会话独立计算,避免跨会话数据干扰。
实现步骤
- 先按
Session分组、Row#升序排序,保证每个会话内的点击行为顺序和原始数据一致 - 按规则逐行生成初始Activity值:
- 若当前行
Click取值为Enter,Activity直接取当前行Page值 - 若当前行
Page和同会话内上一行Page值一致,Activity取当前行Click值 - 其余非Enter、且页面发生跳转的场景,Activity取当前行
Click值(该场景对应跨页面点击行为,符合路径记录逻辑)
- 若当前行
- 按会话分组,对连续重复的Activity值做去重,仅保留第一条记录,满足连续相同Click仅留1条的要求
- 最终筛选输出
Session、Activity两列即可
代码实现
首次运行需先安装依赖包:
install.packages("dplyr")
核心计算代码,将代码中的df替换为你自己的原始数据集变量名即可运行:
library(dplyr) result <- df %>% # 按会话分组,按行号排序保证行为顺序正确 group_by(Session) %>% arrange(Row#, .by_group = TRUE) %>% # 逐行计算初始Activity取值 mutate( lag_page = lag(Page, default = ""), Activity = case_when( Click == "Enter" ~ Page, Page == lag_page ~ Click, TRUE ~ Click ) ) %>% # 标记连续重复的Activity值,过滤重复项 mutate( lag_activity = lag(Activity, default = ""), is_consecutive_dup = Activity == lag_activity ) %>% filter(!is_consecutive_dup) %>% # 保留最终需要的输出列 select(Session, Activity) %>% ungroup()
注意事项
- 所有计算均在单个
Session分组内完成,不会出现跨会话连续值判断的错误 - 针对连续2条及以上相同Click的场景,代码会自动识别连续重复的Activity值,仅保留第一条记录,和规则要求完全匹配
- 如果原始数据存在缺失值、异常Click取值,直接在
case_when判断逻辑中新增对应规则即可适配
内容的提问来源于stack exchange,提问作者user2845095
相关产品推荐
相关产品推荐

