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

如何在R中将观测数据表转换为队列分析专用宽表?

在R中将观测数据表转换为队列分析宽表的方法

嘿,我来帮你搞定这个队列分析的宽表转换需求!你的目标是把访客的每日访问数据,转换成以**首次访问日期(Cohort日期)**为行,后续各天的访客留存数为列的宽表,对吧?我一步步给你拆解实现过程:

第一步:重现并预处理原始数据

首先先确认你的原始数据,然后先做去重——因为同一个访客同一天多次访问,在队列分析里我们只需要统计一次:

# 重现你的原始数据
myDF <- data.frame(
  Date = c("2018-01-01","2018-01-01","2018-01-01","2018-01-02","2018-01-02","2018-01-02","2018-01-03","2018-01-03"),
  `Visitor-ID` = c(1,2,3,2,3,2,2,3)
)

# 去重:每个访客每天只保留一条记录
myDF_unique <- unique(myDF)

第二步:计算每个访客的首次访问日期(Cohort日期)

我们需要用每个访客的首次访问日期来分组,这里用dplyr包来处理会很方便:

library(dplyr)

# 给每个访客标记他们的首次访问日期
cohort_data <- myDF_unique %>%
  group_by(`Visitor-ID`) %>%
  mutate(cohort_date = min(Date)) %>%
  ungroup()

第三步:计算访问日期与首次访问日期的天数差

接下来要把日期转换成日期格式,然后计算每次访问距离首次访问的天数(也就是day0、day1、day2...对应的数值):

# 转换日期格式并计算天数差
cohort_data <- cohort_data %>%
  mutate(
    Date = as.Date(Date),
    cohort_date = as.Date(cohort_date)
  ) %>%
  mutate(day_diff = as.integer(Date - cohort_date))

第四步:统计每个Cohort在各天的访客数

按Cohort日期和天数差分组,统计每组的访客数量:

# 统计每个Cohort在不同天数的访客数
cohort_counts <- cohort_data %>%
  group_by(cohort_date, day_diff) %>%
  summarise(visitors = n(), .groups = "drop")

第五步:转换为宽表格式

最后用tidyr包的pivot_wider函数把长表转成你想要的宽表,还可以把缺失值替换成0(如果需要的话):

library(tidyr)

# 转成宽表并命名列
cohort_wide <- cohort_counts %>%
  pivot_wider(
    names_from = day_diff,
    values_from = visitors,
    names_prefix = "day "
  ) %>%
  # 把cohort_date重命名为Date,符合你的需求格式
  rename(Date = cohort_date)

# 可选:把NA替换为0(表示该天没有访客留存)
cohort_wide <- cohort_wide %>%
  mutate(across(starts_with("day "), ~replace_na(., 0)))

最终结果

运行完上面的代码后,cohort_wide就是你想要的格式:

# A tibble: 2 × 4
  Date       `day 0` `day 1` `day 2`
  <date>       <int>   <int>   <int>
1 2018-01-01       3       2       2
2 2018-01-02       2       2       0

完美匹配你给出的示例结果!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:49:03