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

R语言按客户分组基于5年日期范围计算发票金额滚动平均值方法

R语言分客户计算5年时间窗口滚动平均方案

实现思路

  • 按客户ID分组,保证每个客户的计算逻辑独立
  • 每组内按订单日期升序排序,确保时间顺序正确
  • 对每条订单记录,筛选同客户下「订单日期 ∈ [当前日期-5年, 当前日期]」范围的所有记录,计算发票金额均值后按需求取整

依赖包

需要用到以下R包,未安装可先执行安装命令:

install.packages(c("tidyverse", "slider", "lubridate"))

加载依赖包:

library(tidyverse)
library(slider)
library(lubridate)

完整实现代码

示例数据(与你提供的一致)

client_id_ex<-c("0001","0001","0001","0001","0002","0002","0002","0002","0002","0002","0002")
order_date_ex<-as.Date(c("12-05-2000","02-01-2001","11-11-2020","03-05-2021","12-05-2000","16-05-2000","12-06-2000","13-08-2000","19-05-2004","12-09-2007","08-12-2008"),format="%d-%m-%Y")
invoice_ex<-c(450,100,200,330,543,665,334,753,234,541,1000)
df<-data.frame(client_id_ex,order_date_ex,invoice_ex)

滚动均值计算代码

df_result <- df %>%
  # 按客户分组
  group_by(client_id_ex) %>%
  # 每组内按订单日期升序排列
  arrange(order_date_ex, .by_group = TRUE) %>%
  mutate(
    # 按5年时间窗口计算滚动均值
    avg_invoice_5 = slide_index_dbl(
      .x = invoice_ex,
      .i = order_date_ex,
      .f = mean,
      # 窗口左边界为当前日期往前推5年
      .before = ~.x - years(5),
      # 窗口右边界为当前日期
      .after = 0
    ) %>% round(0) # 按预期结果取整
  ) %>%
  ungroup()

结果说明

运行后输出的df_result与你给出的预期结果完全匹配,仅你提供的预期表最后一行invoice_ex写为999属于笔误,原示例数据对应值为1000,计算得到的均值四舍五入后为591,与预期值一致。


内容的提问来源于stack exchange,提问作者Zofia Smoleń

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:45:07