如果在其他地方得到解答,请提前道歉。我已经搜索了大约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
的其余部分。
答案 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)