You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计R语言DataFrame中用户活动路径的唯一出现次数?

R语言会话路径统计实现

我有如下简化版的DataFrame:

df <- data.frame(ID = rep('A',7), Activity = 
 c('Login','Login','cat1','Login','cat2','Login','Login'))

原始数据结构:

ID Activity
1  A    Login
2  A    Login
3  A     cat1
4  A    Login
5  A     cat2
6  A    Login
7  A    Login

需求说明

  • 从第一行开始处理
  • 初始化session=0
  • 创建包含path和count字段的结果DataFrame
  • 当Activity为Login时开启新会话(session递增),记录当前会话内的所有Activity直到下一个Login出现,形成一条路径
  • 重复上述操作,最终统计各路径的出现次数

预期输出

Path count
1         Login     3
2 Login, cat1     1
3 Login, cat2     1

解决方案

方法1:使用dplyr包(简洁高效)

library(dplyr)

# 标记会话:每遇到Login就生成新的会话ID
df <- df %>%
  mutate(session = cumsum(Activity == "Login"))

# 按会话分组拼接路径,再统计频次
result <- df %>%
  group_by(session) %>%
  summarise(Path = paste(Activity, collapse = ", ")) %>%
  ungroup() %>%
  count(Path, name = "count")

# 输出结果
print(result)

方法2:Base R实现(无依赖)

# 生成会话ID
session_ids <- cumsum(df$Activity == "Login")

# 按会话分组拼接路径
path_list <- tapply(df$Activity, session_ids, function(x) paste(x, collapse = ", "))

# 统计路径频次并转换为DataFrame
result <- as.data.frame(table(path_list), stringsAsFactors = FALSE)
colnames(result) <- c("Path", "count")

# 输出结果
print(result)

两种方法核心逻辑一致:通过cumsum(Activity == "Login")标记每个会话的边界,对会话内的Activity进行拼接后,统计各路径的出现次数,均可得到预期结果。

内容的提问来源于stack exchange,提问作者H_A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 10:53:32