R-dplyr实现非均匀时间数据下同客户同产品过去7天使用次数统计
基于dplyr的非等间隔7天滑动统计实现方案
直接配合slider包的索引滑动函数即可实现需求,无需显式循环,且天然适配时间分布不均匀的场景,性能远高于暴力双重循环实现:
前置依赖
需要安装加载以下两个包:
install.packages(c("dplyr", "slider")) library(dplyr) library(slider)
实现代码
# 假设你的原始数据集名为df,字段名为customer_key、product_code、timestamp result <- df %>% # 生成原始行号用于最后恢复原始顺序 mutate(orig_row = row_number()) %>% # 按客户、产品编码分组 group_by(customer_key, product_code) %>% # 组内按时间戳升序排序 arrange(timestamp, .by_group = TRUE) %>% # 基于时间戳的非等间隔滑动统计过去7天的使用次数 mutate(usage_count_7d = slide_index_dbl( .x = rep(1, n()), .i = timestamp, .f = sum, .before = days(7) )) %>% ungroup() %>% # 恢复原始数据的排序 arrange(orig_row) %>% select(-orig_row)
注意事项
- 需提前将
timestamp字段转换为R的标准时间格式(Date/POSIXct类型),如果是字符串格式可配合lubridate包的相关函数转换 - 上述统计结果包含当前行本身的记录,如果需要统计当前行之前的7天次数,直接将
usage_count_7d的结果减1即可 - 100万行规模的数据集该方案运行耗时通常在秒级,远优于暴力实现的O(n²)复杂度
内容的提问来源于stack exchange,提问作者NaiveBayesian
相关产品推荐
相关产品推荐

