【发布时间】:2021-09-04 09:21:45
【问题描述】:
我就是无法让这种微不足道的行为发挥作用。我已经包含了很多例子来说明这个问题。
我有分钟柱数据,我想对 15 个柱进行分组并对它们执行一个函数,然后生成 15 分钟柱数据。我得到的时间戳是期间的开始而不是结束。我在cut() 中尝试了right 和include.lowest 参数,但这似乎不起作用。我还尝试了一些dplyr 排列,但无法正常工作。
set.seed(4984)
dat = data.frame(time=seq(as.POSIXct("2016-05-01"), as.POSIXct("2016-05-01") + 60*99, by=60),
ret=rnorm(100))
dat$by15 = cut(dat$time, breaks="15 min")
dat.summary = aggregate(ret ~ by15, FUN=sum, data=dat)
> head(dat)
time ret
1 2016-05-01 00:00:00 -0.1739740
2 2016-05-01 00:01:00 0.2906288
3 2016-05-01 00:02:00 -1.0067554
4 2016-05-01 00:03:00 0.3887459
5 2016-05-01 00:04:00 0.2865937
6 2016-05-01 00:05:00 -0.4570531
并聚合:
> head(dat.summary)
by15 ret
1 2016-05-01 00:00:00 0.6711667
2 2016-05-01 00:15:00 -1.4344507
3 2016-05-01 00:30:00 3.0797471
4 2016-05-01 00:45:00 3.7564378
5 2016-05-01 01:00:00 -2.1308232
6 2016-05-01 01:15:00 -3.7179450
问题是时间戳被作为周期的开始。在上面的示例中,dat.summary 应该如下所示:
> head(dat.summary)
by15 ret
1 2016-05-01 00:14:00 0.6711667
2 2016-05-01 00:29:00 -1.4344507
3 2016-05-01 00:44:00 3.0797471
4 2016-05-01 00:59:00 3.7564378
5 2016-05-01 01:14:00 -2.1308232
6 2016-05-01 01:29:00 -3.7179450
更长的故事如下。我想计算实现的方差。 R 中有一个功能:rRealizedVariance 来自实现的包,rRVar 来自高频。问题是他们计算 *daily( 实现的方差。我想在不同的时间段内执行此操作(例如每小时实现的方差)。实现的方差只是回报的平方和一个周期(例如 60 分钟)。在 python 中,每日实现的方差计算为:
return returns.resample('D').agg(lambda x: x.pow(2).sum())
我可以按 60 分钟计算:
return returns.resample('60min').agg(lambda x: x.pow(2).sum())
我正在尝试让它在 R 中工作。
编辑:我想在 15 分钟边界上对齐时间,例如,如果 dat 没有从干净的 15 分钟边界点开始:
dat = data.frame(time=seq(as.POSIXct("2016-05-01 00:03:00"), as.POSIXct("2016-05-01 00:03:00") + 60*99, by=60),
ret=rnorm(100))
添加 14 分钟的简单方法会导致整个时间分量错位。
【问题讨论】:
-
值增加 14 秒
-
@HongOoi 您的意思是在时间值上增加 14 分钟?好的,看起来可以,但我觉得这样做有点脏。