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

R中索引和合并XTS对象的问题,r,merge,indexing,xts,zoo,R,Merge,Indexing,Xts,Zoo,如果在别处得到答复,请提前道歉。我搜索了大约24小时,每次都是空的 是我正在使用的数据集 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 #C

如果在别处得到答复,请提前道歉。我搜索了大约24小时,每次都是空的

是我正在使用的数据集

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)
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) 为什么合并没有为同一索引(如上午4点打印?)提供
SpyReg
Spy
值?我尝试了所有4个“连接”选项,但没有一个有效


3) 我想有一种比我现在尝试的更优雅的方法来解决这个问题。在创建
Spy
之后,它不是规则的,一分钟一分钟的。我想创建一个规则的
xts
对象,它没有间隙,从午夜到23:59一分钟一分钟不停地流动,将
Spy
中的条目添加到I中t、 然后执行
na.locf
以原始数据替换
NAs
的其余部分。

将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)

A) 在你的解决方案中,SpyReg['T04:00:00']只返回标题。SpyReg['T04:00:00/T04:00:01']返回了凌晨4点的条目。我觉得我基本上误用了xts,不知道你是否可以指出我的错误?C)你说我应该使用“ct”而不是“lt”"... 我重新运行了我的原始代码,但在创建“y”的步骤中,我使用了POSIXct而不是lt,它仍然让我感到所有的合并难题。。。。一如既往地感谢您,您的帮助是无价之宝,先生!A) 不客气。B) “一天中的时间”索引需要开始和结束时间<代码>“T04:00:00”永远不会起作用(前导零也要记住)。C) 您可以设置
origin=“2013-03-30 00:00”
,此时它通常为
“1970-01-01”
。正确地设置它,合并工作:
as.POSIXct(1333065600,origin=“1970-01-01”)+seq(0,60*60*24-1,by=60)
。确实如此!我以为我用原点做了“ct”,但似乎没有。问题解决了(直到下一个哈哈)谢谢!
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)
SpyReg <- merge(Spy, xts(, seq(start(Spy),end(Spy),by="1 min")), fill=na.locf)