R 从xts获取或细分每天前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)] 然后将结果绑定在一起 这并

我想从分钟数数据中细分出每天时间序列数据的前5分钟,但是前5分钟并非在每天的同一时间出现,因此使用类似
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的评论,特别是开发了一个非常有用的包。