我有一个包含每日需求值的数据集。数据集包括日期,需求和工作日的列。我想要一个函数来创建一个新列,其中包含对同一工作日过去5次观察的平均需求。例如,对于2月12日星期一,我想要一个前五个星期一的平均需求值。 (1月5日,1月29日,1月22日,1月15日和1月8日)。
我是如何在R中编写代码的?
答案 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)。我可以发布确切的代码,但不是那个意思。