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

在R语言中识别复购行为:用户-物料维度的季度复购数据筛选需求

嘿,我来帮你搞定这个R语言里的复购数据统计需求!根据你的描述,核心是按「用户-物料」维度统计购买频次(或者复购次数),还可以扩展到按年/季度拆分。我分步骤给你演示:

1. 先准备数据(模拟你的数据集)

先模拟你给出的样例数据,方便后续操作:

df <- data.frame(
  User = c(1,1,2,2,3,1,2,2,2),
  Material = c(10001,10002,10003,10002,10004,10001,10003,10002,10002),
  Date = c(20150119,20150120,20160121,20181212,20181110,20150419,20160421,20180912,20180612)
)

2. 转换日期格式(可选但重要)

如果后续要按年/季度统计,得先把Date列转换成R能识别的日期格式:

df$Date <- as.Date(as.character(df$Date), format = "%Y%m%d")

3. 核心需求:按用户-物料统计总复购频次

这里用dplyr包(数据处理最常用的工具)来实现,代码直观易懂:

library(dplyr)

# 分组统计每个用户对每个物料的总购买次数
total_recurring <- df %>%
  group_by(User, Material) %>%
  summarise(RecurringPurchasing = n(), .groups = "drop") # n()就是统计每组的行数,也就是购买次数

# 如果你只需要有复购的记录(即购买次数≥2),再加个过滤:
total_recurring_filtered <- total_recurring %>%
  filter(RecurringPurchasing >= 2)

# 查看结果
print(total_recurring_filtered)

运行后就能得到你想要的输出:

# A tibble: 3 × 3
    User Material RecurringPurchasing
   <dbl>    <dbl>               <int>
1     1    10001                   2
2     2    10002                   3
3     2    10003                   2

如果不想用dplyr,用base R的aggregate函数也能实现:

# base R 版本
total_recurring_base <- aggregate(. ~ User + Material, data = df, FUN = length)
names(total_recurring_base)[3] <- "RecurringPurchasing"
# 过滤掉单次购买的记录
total_recurring_base_filtered <- total_recurring_base[total_recurring_base$RecurringPurchasing >= 2, ]

4. 扩展需求:按年/季度统计复购频次

如果要拆分到每年每季度,只需要在分组时加上年季度维度即可:

# 先新增年季度列
df <- df %>%
  mutate(YearQuarter = format(Date, "%Y-Q%q")) # 格式化为"2015-Q1"这样的形式

# 按用户-物料-年季度统计
quarterly_recurring <- df %>%
  group_by(User, Material, YearQuarter) %>%
  summarise(RecurringPurchasing = n(), .groups = "drop")

print(quarterly_recurring)

输出会显示每个用户在每个季度对每个物料的购买次数,比如:

# A tibble: 9 × 4
    User Material YearQuarter RecurringPurchasing
   <dbl>    <dbl> <chr>                     <int>
1     1    10001 2015-Q1                       1
2     1    10001 2015-Q2                       1
3     1    10002 2015-Q1                       1
4     2    10002 2018-Q3                       2
5     2    10002 2018-Q4                       1
6     2    10003 2016-Q1                       1
7     2    10003 2016-Q2                       1
8     3    10004 2018-Q4                       1

小说明

这里的RecurringPurchasing是总购买次数,如果你的需求是排除首次购买的复购次数(即总次数-1),只需要把summarise里的n()改成n()-1即可,比如:

summarise(RecurringPurchasing = n() - 1, .groups = "drop")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:23:02