我的数据框有列名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)
答案 0 :(得分:0)
每个日期有48个这样的固定半小时窗口。 (实际上你的窗户是固定的,甚至没有滑动。)看起来像一个交易数据集,所以你只想要从09:00-09:30到15:30-16:00(?)的时间窗口,因此只有14个窗口每个日期。
您只需使用lubridate::interval
创建这些日期时间窗口,然后使用dplyr/data.table
执行split-apply-combine(聚合)以获取每个窗口中的平均值。
如果您post a reproducible example我发布了代码。
有一点:
答案 1 :(得分:0)
正如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")