r语言 - 时间戳的半小时窗口内字段的平均值



我的dataframe的列名是Timestamp, es,看起来像:

          Timestamp     es
2015-04-01 09:07:42     31
2015-04-01 09:08:01   29.5
2015-04-01 09:15:03   18.5
2015-04-01 09:15:05    8.8
2015-04-01 09:15:09    9.6

时间运行到15:30:30(每天每个时间戳大约12000个es数据点)和相应的es。

R是否在某些包或代码中有一些函数来平均半小时内所有时间戳的es ?示例输出应该如下所示:

2015-04-01 09:30:00 Value(Average of all es from 9:00 to 9:30)
2015-04-01 10:00:00 Value(Average of all es from 9:30 to 10:00)
2015-04-01 10:30:00 Value(Average of all es from 10:00 to 10:30)
... (the list goes on till 15:30:30)

每个日期有48个固定的半小时窗口。(实际上你的窗户是固定的,甚至不能滑动。)看起来像一个交易数据集,所以你只想要从09:00-09:30到15:30-16:00(?)的时间窗口,因此每个日期只有14个窗口。

您只需使用lubridate::interval创建这些日期时间窗口,然后使用dplyr/data.table进行拆分应用组合(聚合)以获得每个窗口内的平均值。

如果你张贴一个可复制的例子,我会张贴代码。

一点

:

  • 请注意,如果窗口是空的,无论您是希望平均值为0,而不是NA,还是那些(市场关闭的)窗口应该从结果中省略。您还希望排除周末和市场假期。如果你的数据稀疏,你必须自己构建这些日期。

正如smci警告的那样,您添加的有关数据的信息越少,帮助就越有限。这是一个base R方法,从提供的日期创建30分钟的间隔。因此,空间隔不会出现(这取决于您想要的输出是否有帮助)。聚合函数通过期望的组间隔应用平均值。我扩展了您的示例以包含更多的测试间隔:

cuts <- seq(round(min(df$Timestamp), "hours"), max(df$Timestamp)+30*60, "30 min")
aggregate(df$es, list(cut(df$Timestamp, cuts)), mean)
#              Group.1     x
#1 2015-04-01 09:00:00 31.00
#2 2015-04-01 10:00:00 29.50
#3 2015-04-01 11:00:00 13.65
#4 2015-04-01 13:00:00  9.60

df <- structure(list(Timestamp = structure(c(1427893662, 1427897281, 
1427901303, 1427901605, 1427908509), class = c("POSIXct", "POSIXt"
), tzone = ""), es = c(31, 29.5, 18.5, 8.8, 9.6)), .Names = c("Timestamp", 
"es"), row.names = c(NA, -5L), class = "data.frame")

相关内容

  • 没有找到相关文章

最新更新