R 从xts获取或细分每天前5分钟的数据
我想从分钟数数据中细分出每天时间序列数据的前5分钟,但是前5分钟并非在每天的同一时间出现,因此使用类似R 从xts获取或细分每天前5分钟的数据,r,time-series,subset,xts,R,Time Series,Subset,Xts,我想从分钟数数据中细分出每天时间序列数据的前5分钟,但是前5分钟并非在每天的同一时间出现,因此使用类似xtsobj[“T09:00/T09:05”]的方法将无法工作,因为前5分钟的开始时间发生了变化。i、 e.有时从上午9点20分开始,或者早上其他一些随机时间,而不是上午9点 到目前为止,我已经能够使用如下函数对每天的第一分钟进行子集划分: k <- diff(index(xtsobj))> 10000 xtsobj[c(1, which(k)+1)] 然后将结果绑定在一起 这并
xtsobj[“T09:00/T09:05”]
的方法将无法工作,因为前5分钟的开始时间发生了变化。i、 e.有时从上午9点20分开始,或者早上其他一些随机时间,而不是上午9点
到目前为止,我已经能够使用如下函数对每天的第一分钟进行子集划分:
k <- diff(index(xtsobj))> 10000
xtsobj[c(1, which(k)+1)]
然后将结果绑定在一起
这并不总是准确的。我希望可以使用像“first”这样的函数,但我不确定如何在几天内做到这一点,也许这是最佳的解决方案。有没有更好的方法获取这些信息
提前感谢stackoverflow社区。您如何使用软件包
lubridate
,首先找出每天根据您的随机变化排序的起点,然后使用功能minutes
所以它会是这样的:
five_minutes_after = starting_point_each_day + minutes(5)
5_min_period = paste(starting_point_each_day,five_minutes_after,sep='/')
xtsobj[5_min_period]
然后,您可以使用xts
的常规子集执行以下操作:
five_minutes_after = starting_point_each_day + minutes(5)
5_min_period = paste(starting_point_each_day,five_minutes_after,sep='/')
xtsobj[5_min_period]
编辑:
@约书亚
我认为这是可行的,看看这个例子:
library(lubridate)
x <- xts(cumsum(rnorm(20, 0, 0.1)), Sys.time() - seq(60,1200,60))
starting_point_each_day= index(x[1])
five_minutes_after = index(x[1]) + minutes(5)
five_min_period = paste(starting_point_each_day,five_minutes_after,sep='/')
x[five_min_period]
split(xtsobj,“days”)
将为每天创建一个包含xts对象的列表
然后,您可以每天将head
应用于
lapply(split(xtsobj, "days"), head, 5)
或者更一般地说
lapply(split(xtsobj, "days"), function(x) {
x[1:5, ]
})
最后,如果您愿意,您可以rbind
将日期重新组合在一起
do.call(rbind, lapply(split(xtsobj, "days"), function(x) x[1:5, ]))
xtsobj['5分钟周期]
不起作用。您只能使用非常特定类型的字符串来子集xts对象。我说过xtsobj['5\u min\u period']
不起作用,因为'5\u min\u period'
不是xts可以识别的字符串。很高兴你纠正了错误。感谢@JoshuaUlrich的评论,特别是开发了一个非常有用的包。