首页 > 解决方案 > 移动平均 3 个月与前 n 个月而不包括前 3 个月?

问题描述

一些数据

df <- data.frame(
  dates = seq(as.Date('2018-01-01'), as.Date('2018-12-01'), by = "month"),
  user_id = c("a","b","c","a","b","c","a","b","c","a","b","c"),
  somenum = 1:12
)

 df
        dates user_id somenum
1  2018-01-01       a       1
2  2018-02-01       b       2
3  2018-03-01       c       3
4  2018-04-01       a       4
5  2018-05-01       b       5
6  2018-06-01       c       6
7  2018-07-01       a       7
8  2018-08-01       b       8
9  2018-09-01       c       9
10 2018-10-01       a      10
11 2018-11-01       b      11
12 2018-12-01       c      12

使用例如这里的答案,我可以计算出 3 个月的滚动平均值。解决方案按用户顺序排列数据,然后使用rollapply().

average这适用于计算a的滚动 3 个月user_id。如果我想计算average从前 3 个月到那个的滚动,不包括最初的 3 个月,该mean怎么办?

例如user_id' c' 有 3 个月average12 + 9 + 6 = 27/3 = 9. 如果想要前 3 个,那就是mean(3) = 3. 如果我的数据更长,则可能比第一个初始 3 个月还要早 3 个月。

最终目标是分析用户行为变化......最近 3 个月与前 3 个月用户的 somenum 比率是多少。

这怎么可能计算出来?

标签: r

解决方案


一种选择是使用 rollmean 参数 align="left" 创建一个列并在另一个中使用 align="right"。如果您希望该函数甚至用于观察次数少于 3 的组,则必须使用带有参数 partial=T 的 rollapply 函数。


推荐阅读