我有三天的时间序列数据,格式为xts
个对象。伪数据生成为:
library(xts)
Sys.setenv(TZ="Asia/Kolkata")
seq <- timeBasedSeq('2015-06-01/2015-06-03 23')
z <- xts(1:length(seq),seq)
现在,使用任何第三天观察的指数,我想在同一时刻提取前一天的观察。因此,我将其编码为
a <- z[50] # Any observation of third day will suffice
b <- as.Date(index(a), tz ="Asia/Kolkata")-1 #previous day date
z[.indexDate(z) %in% b & .indexhour(z) %in% .indexhour(a)]
最后一个命令导致
[,1]
2015-06-03 01:00:00 50
但是,它应该导致
[,1]
2015-06-02 01:00:00 26
任何人都可以指出我做错了吗?
答案 0 :(得分:1)
问题是.indexDate
定义为.index(x) %/% 86400L
,.index
返回自UTC起源以来的秒数。正如您在构建b
时所做的那样,转换为日期时需要考虑时区:
d <- as.Date(index(z), tz ="Asia/Kolkata")
z[d %in% b & .indexhour(z) %in% .indexhour(a)]
# [,1]
# 2015-06-02 01:00:00 26