从 R 中的 xts 对象中提取前一天的观察结果

Extract previous day observation from xts object in R

我有三天的时间序列数据,格式为 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

谁能指出我哪里做错了?

问题是 .indexDate 被定义为 .index(x) %/% 86400L,而 .index returns 是从 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