r - R cut - 标签具有前瞻偏差
问题描述
我就是无法让这种微不足道的行为发挥作用。我已经包含了很多例子来说明这个问题。
我有分钟柱数据,我想对 15 个柱进行分组并对它们执行一个函数,然后生成 15 分钟柱数据。我得到的时间戳是期间的开始而不是结束。我尝试了right
andinclude.lowest
参数,cut()
但这似乎不起作用。我还尝试了一些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
高频。问题是他们计算*每天(实现的方差。我想在不同的时间段(例如每小时实现的方差)执行此操作。实现的方差只是一段时间内(例如 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 分钟的简单方法会导致整个时间组件错位。
解决方案
一个天真的答案是:
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")
# add 14 minutes
dat$by15 <- as.POSIXct(as.character(dat$by15)) + 60 * 14
dat.summary = aggregate(ret ~ by15, FUN=sum, data=dat)
编辑 1:
min_date <- "2016-05-01"
max_date <- "2016-06-01"
dat$by15 = cut(dat$time, breaks=seq(as.POSIXct(paste(min_date, "00:00:00")),
as.POSIXct(paste(max_date, "00:15:00")), by = "15 min"))
推荐阅读
- python-3.x - 我们可以从 ~/.bash_profile 加载环境变量而无需获取 ~./bash_profile 吗?
- javascript - 使 HTML 页面在 5 分钟后隐藏所有内容,仅在 30 分钟后再次显示
- sql - 如何正确使用 pg_dump 将我的本地数据库复制到远程服务器
- php - Mysql:查询默认的订单和排名(固定/保留条目?)
- elasticsearch - 通过代理在企业防火墙后面的 Elasticsearch RestHighLevelClient
- javascript - MongoDB - 仅当嵌套数组中的所有条目存在时才更新它们
- android - Nativescript - 在 Android 中隐藏状态栏
- django - Django外键没有获取数据
- function - Kotlin 多接口委托
- javascript - 未找到 Gatsby 错误页面资源。不渲染 React。盖茨比构建之后