同一工作日过去五次观察的平均值

时间:2018-02-13 12:08:12

标签: r

我有一个包含每日需求值的数据集。数据集包括日期,需求和工作日的列。我想要一个函数来创建一个新列,其中包含对同一工作日过去5次观察的平均需求。例如,对于2月12日星期一,我想要一个前五个星期一的平均需求值。 (1月5日,1月29日,1月22日,1月15日和1月8日)。

我是如何在R中编写代码的?

1 个答案:

答案 0 :(得分:1)

您可以使用round_date包中的lubridate,并使用by中的data.table参数获取超过7天的日期:

由于没有数据,我创建了一些随机数据:

数据

dt <- data.table(var1 = runif(200, 0, 100), 
                 tme = seq.POSIXt(Sys.time(), by = "3 hour", length.out = 200))

> str(dt)
Classes ‘data.table’ and 'data.frame':  200 obs. of  2 variables:
 $ var1: num  82.3 62.7 79.3 48.4 92.9 ...
 $ tme : POSIXct, format: "2018-02-13 12:15:05" "2018-02-13 15:15:05" "2018-02-13 18:15:05" ...
 - attr(*, ".internal.selfref")=<externalptr> 

> head(dt)
       var1                 tme
1: 82.27774 2018-02-13 12:15:05
2: 62.72476 2018-02-13 15:15:05
3: 79.25656 2018-02-13 18:15:05
4: 48.44758 2018-02-13 21:15:05
5: 92.86983 2018-02-14 00:15:05
6: 82.83628 2018-02-14 03:15:05

输出

> dt[, list(mean_val = mean(var1)), by = list(period = round_date(tme, "7 days"))]
       period mean_val
1: 2018-02-15 47.77198
2: 2018-02-22 49.33726
3: 2018-03-01 41.00858
4: 2018-03-08 51.81597

在特定日期开始并不是很困难。 lubridate中有一些选项可以帮助您(例如here)。我可以发布确切的代码,但不是那个意思。