R中不同大小数据帧的移动平均值

时间:2018-03-09 21:13:22

标签: r dataframe moving-average

我每5分钟收集一组数据,包括以下结构:

>df1 

Date                  X1
01/01/2017 0:00       1
01/01/2017 0:30       32
01/01/2017 1:00       65
01/01/2017 1:30       14
01/01/2017 2:00       25
01/01/2017 2:30       14
01/01/2017 3:00       85
01/01/2017 3:30       74
01/01/2017 4:00       74
01/01/2017 4:30       52
01/01/2017 5:00       25
01/01/2017 5:30       74
01/01/2017 6:00       45
01/01/2017 6:30       52
01/01/2017 7:00       21
01/01/2017 7:30       41
01/01/2017 8:00       74
01/01/2017 8:30       11
01/01/2017 9:00       2
01/01/2017 9:30       52

给出另一个向量,仅包含日期,但具有不同的时间频率:

>V1

Date2
1/1/2017 1:30:00
1/1/2017 3:30:00
1/1/2017 5:30:00
1/1/2017 9:30:00

我想计算X1的移动平均值,但最后我真正需要的唯一值是与V1中的日期关联的值(但保留了移动平均线生成的平滑值) )

您是否建议计算X1的移动平均值,然后将该值与V1中的相应日期相关联并重新应用移动平均线?或者你知道R中的一个函数可以帮助我实现这个目标吗?

谢谢,非常感谢您的帮助!

索菲亚

2 个答案:

答案 0 :(得分:0)

$contentType->update(['template_id' => $newId]); 是构建移动平均线的便捷方式

假设您想要一个简单的算术移动平均线,您需要确定您想要在一起平均的元素数量,以及您是否需要单边或双边平均值。任意地,我会选择5和片面。

filter

请注意&#34; moving.average&#34;由于移动平均线未定义,所以元素将比elements <- 5 df1$x1.smooth <- filter(df1$X1, filter = rep(1/elements, elements), sides=1) elements-1个元素,直到有df1$X1项为平均值。

elements现在

df1

现在, Date X1 x1.smooth 1 01/01/2017 0:00 1 NA 2 01/01/2017 0:30 32 NA 3 01/01/2017 1:00 65 NA 4 01/01/2017 1:30 14 NA 5 01/01/2017 2:00 25 27.4 6 01/01/2017 2:30 14 30.0 7 01/01/2017 3:00 85 40.6 8 01/01/2017 3:30 74 42.4 9 01/01/2017 4:00 74 54.4 10 01/01/2017 4:30 52 59.8 11 01/01/2017 5:00 25 62.0 12 01/01/2017 5:30 74 59.8 13 01/01/2017 6:00 45 54.0 14 01/01/2017 6:30 52 49.6 15 01/01/2017 7:00 21 43.4 16 01/01/2017 7:30 41 46.6 17 01/01/2017 8:00 74 46.6 18 01/01/2017 8:30 11 39.8 19 01/01/2017 9:00 2 29.8 20 01/01/2017 9:30 52 36.0 merge Date = Date2 df1 Date %in% >

答案 1 :(得分:0)

另一种选择可能是使用zoo包。可以使用rollapply计算并添加数据框中的另一列,该列将保留X1的移动平均值。

移动平均宽度4(每2小时)的实现可以实现为:

Library(zoo)
#Add another column with mean value
df$mean <- rollapply(df$X1, 4, mean, align = "right", fill = NA) 

df
   #                   Date X1  mean
   # 1  2017-01-01 00:00:00  1    NA
   # 2  2017-01-01 00:30:00 32    NA
   # 3  2017-01-01 01:00:00 65    NA
   # 4  2017-01-01 01:30:00 14 28.00
   # 5  2017-01-01 02:00:00 25 34.00
   # 6  2017-01-01 02:30:00 14 29.50
   # 7  2017-01-01 03:00:00 85 34.50
   # 8  2017-01-01 03:30:00 74 49.50
   # 9  2017-01-01 04:00:00 74 61.75
   # 10 2017-01-01 04:30:00 52 71.25
   # 11 2017-01-01 05:00:00 25 56.25
   # 12 2017-01-01 05:30:00 74 56.25
   # 13 2017-01-01 06:00:00 45 49.00
   # 14 2017-01-01 06:30:00 52 49.00
   # 15 2017-01-01 07:00:00 21 48.00
   # 16 2017-01-01 07:30:00 41 39.75
   # 17 2017-01-01 08:00:00 74 47.00
   # 18 2017-01-01 08:30:00 11 36.75
   # 19 2017-01-01 09:00:00  2 32.00
   # 20 2017-01-01 09:30:00 52 34.75