R中索引和合并XTS对象的问题

时间:2014-02-11 12:02:35

标签: r merge indexing xts zoo

如果在其他地方得到解答,请提前道歉。我已经搜索了大约24小时,并且每个回合都空了。

This是我正在使用的数据集

Sys.setenv(TZ='GMT')
dat = read.csv("SPY_MINUTE_TRADE.csv", header = TRUE) #QuantQuote sample minute data
dat[,2] <- sprintf('%04d', dat[,2]) #add a zero to front of time IE 400 becomes 0400 aka 4AM

#Create a zoo object ordered by day and time from the dat dataframe
datzoo <- read.zoo(file=dat, sep=",", header=TRUE, 
                 index.column=1:2, format="%Y%m%d %H%M", tz="", 
                 colClasses = rep(c("character", "numeric"), c(2, 8)))

Spy <- as.xts(datzoo)

# Create regular series from 00:00 to 23:59 of 1 minute prints
y <-  xts(seq(from = 1, to = 60*24, by = 1), as.POSIXlt((0), 
    origin="2013-03-30 00:00", tz='GMT')+seq(from = 0, to = 60*60*24-1, by = 60))
colnames(y) <- "TempIndex"

#Merge the regular ts (y) with Spy and remove the original Spy column
SpyReg <- merge(y,Spy, join='left')
SpyReg$TempIndex <- NULL

#Capture the index of Spy
ISpy <- index(Spy)

我对上述代码有几个问题......

1)SpyReg["2012-03-30 04:00:00 GMT"]返回

 OPEN HIGH LOW CLOSE VOLUME SPLITS EARNINGS DIVIDENDS

Spy["2012-03-30 04:00:00 GMT"]返回给定索引的正确Spy值

                      OPEN   HIGH    LOW  CLOSE VOLUME SPLITS EARNINGS DIVIDENDS
2012-03-30 04:00:00 140.66 140.66 140.66 140.66   2160      1        0         0

然而,

SpyReg["T04:00:00/T04:01:00"]
                    OPEN HIGH LOW CLOSE VOLUME SPLITS EARNINGS DIVIDENDS
2013-03-30 04:00:00   NA   NA  NA    NA     NA     NA       NA        NA
2013-03-30 04:01:00   NA   NA  NA    NA     NA     NA       NA        NA

为什么这是,当两者都是相同索引类型,月份和时间的xts对象?不应该SpyReg[""2012-03-30 04:00:00 GMT"]返回:

                    OPEN HIGH LOW CLOSE VOLUME SPLITS EARNINGS DIVIDENDS
2013-03-30 04:00:00   NA   NA  NA    NA     NA     NA       NA        NA

2)为什么合并不给SpyReg相同索引的Spy值(例如4AM打印?)我尝试了所有4个“加入”选项,但没有一个工作......

3)我认为解决这个问题的方法比我想做的要多得多。创建Spy后,它不是一般的,一分钟一分钟。我想创建一个没有间隙的常规xts对象,从午夜到23:59一分钟一分一秒地流动,将Spy中的条目添加到其中,然后执行na.locf到用原始数据替换NAs的其余部分。

1 个答案:

答案 0 :(得分:3)

将xts对象的索引设置为POSIXlt会导致一些奇怪的行为。我建议您改为使用POSIXct

URL <- "http://quantquote.com/sample/SPY_MINUTE_TRADE.csv"
Spy <- read.zoo(URL, sep=",", header=TRUE, index.column=1:2, FUN=function(x) 
    as.POSIXct(sprintf("%8d %04d",x[,1],x[,2]), format="%Y%m%d %H%M", tz=""))
Spy <- as.xts(Spy)

现在,您可以将Spy与具有所需常规索引值的“空”xts对象合并。

SpyReg <- merge(Spy, xts(, seq(start(Spy),end(Spy),by="1 min")), fill=na.locf)