2016-03-18 47 views
1

我有3天的时间序列数据,格式为xts对象。伪数据被生:从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 

任何人都可以点我做错了吗?

回答

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