在R中计算视频截至各分钟的累计唯一用户数
问题描述
我有视频相关数据,想要在R中生成一张汇总表,统计每个视频截至对应分钟的累计唯一用户数量。尝试按Video和Minute分组后,只能得到该分钟的唯一用户数,而非累计值。
原始数据表
| User | Video | Minute |
|---|---|---|
| a | V1 | 1 |
| b | V1 | 1 |
| b | V1 | 1 |
| c | V1 | 1 |
| d | V1 | 2 |
| c | V1 | 2 |
| e | V1 | 2 |
| a | V2 | 1 |
| b | V2 | 2 |
| c | V2 | 2 |
目标数据表
| Video | Minute | Unique Users |
|---|---|---|
| V1 | 1 | 3 |
| V1 | 2 | 5 |
| V2 | 1 | 1 |
| V2 | 2 | 3 |
解决方案
可以用dplyr包实现累计唯一用户数的统计,步骤如下:
- 安装并加载
dplyr包(未安装则执行安装命令):
install.packages("dplyr") library(dplyr)
- 处理数据并生成汇总表:
# 假设原始数据框名为df result <- df %>% # 去重:保留每个用户在对应视频中的首次记录 distinct(User, Video, .keep_all = TRUE) %>% # 按视频分组,按分钟升序排序 group_by(Video) %>% arrange(Minute, .by_group = TRUE) %>% # 累计计算截至当前分钟的唯一用户数 mutate(Unique_Users = cumsum(!duplicated(User))) %>% # 按视频+分钟分组,提取对应分钟的累计最大值 group_by(Video, Minute) %>% summarise(Unique_Users = max(Unique_Users), .groups = "drop")
- 查看结果:
print(result)
逻辑说明
distinct(User, Video, .keep_all = TRUE):剔除同一用户在同一视频中的重复记录,仅保留首次出现的条目。group_by(Video) %>% arrange(Minute):确保按视频分组后,分钟按时间顺序排列,保证累计统计的正确性。cumsum(!duplicated(User)):通过判断用户是否首次出现,将逻辑值转换为数值后累加,得到累计唯一用户数。- 最后按视频和分钟分组取最大值,确保每个分钟对应的是截至该分钟的累计用户总数。
内容的提问来源于stack exchange,提问作者Aman
相关产品推荐
相关产品推荐

