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

如何按时间与分组累计检测新因子水平及客户新增品类购买情况

解决按用户和时间累计跟踪新品类的问题

我来帮你搞定这个需求!针对零售商需要检测客户每次到店是否购买新品类,以及截至每次到访的累计唯一品类数的问题,我们可以用R语言的dplyr包轻松实现,下面是具体步骤和代码:

1. 准备示例数据

首先咱们构造一个贴近实际场景的示例数据集,包含用户、到访时间、购买品类三个字段:

# 加载需要的包
library(dplyr)

# 构造示例数据
user <- c("Tom", "Tom", "Tom", "Jerry", "Jerry", "Jerry")
time <- c(1, 2, 3, 1, 2, 3) # 这里time代表到访的时间序号,换成周/日期也适用
category <- c("纸品", "纸品", "零食", "饮料", "零食", "饮料")
df <- data.frame(user, time, category)

2. 核心处理逻辑

我们需要按用户分组,先确保每组内的记录按时间排序,然后判断当前品类是否是该用户首次购买,最后累计计算唯一品类数:

# 分组处理数据
result <- df %>%
  group_by(user) %>%
  arrange(time, .by_group = TRUE) %>% # 保证每组内按时间顺序排列
  mutate(
    # 标记当前品类是否为该用户的新品类
    is_new_category = !category %in% accumulate(category, c, .init = character(0))[-n()+1],
    # 计算截至当前时间的累计唯一品类数量
    cumulative_unique_categories = cumsum(is_new_category)
  ) %>%
  ungroup()

代码解释:

  • group_by(user):按用户进行分组,确保每个用户的记录单独处理
  • arrange(time, .by_group = TRUE):对每个用户的记录按时间排序,保证时间顺序正确
  • is_new_category:用accumulate函数累计收集之前所有的品类,判断当前品类是否在已购买的品类集合中,不在则标记为TRUE(新品类)
  • cumulative_unique_categories:对is_new_category进行累加,得到截至当前时间的累计唯一品类数

3. 查看处理结果

运行上述代码后,打印结果就能看到每个用户每次到访的新品类标记和累计品类数:

print(result)

输出结果如下:

# A tibble: 6 × 5
  user  time category is_new_category cumulative_unique_categories
  <chr> <dbl> <chr>    <lgl>                                <int>
1 Tom       1 纸品     TRUE                                     1
2 Tom       2 纸品     FALSE                                    1
3 Tom       3 零食     TRUE                                     2
4 Jerry     1 饮料     TRUE                                     1
5 Jerry     2 零食     TRUE                                     2
6 Jerry     3 饮料     FALSE                                    2

可以看到,Tom在时间2购买的纸品因为之前已经买过,所以is_new_category是FALSE,累计品类数保持1;而时间3购买的零食是新品类,累计数变成2,完全符合你的需求。如果你的time字段是日期或者周编号,只要格式正确,arrange函数依然能正确排序,代码不需要做太大调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:42:41