2011-05-20 45 views
1

我有1分钟的盘中价格数据,其中缺少数据点。因此我想填补它们。在xts股票价格对象中填充缺失数据

通过我的建议在以下岗位阅读并尝试过类似的过程: R: Filling missing dates in a time series?

在我的情况下丢失的数据点是第一笔交易,即在9时31分00秒。

> head(s) 
        AMR.Open AMR.High AMR.Low AMR.Close AMR.Volume AMR.WAP AMR.hasGaps AMR.Count 
2010-09-10 09:32:00  6.08  6.10 6.07  6.10  298 6.087   0  39 
2010-09-10 09:33:00  6.10  6.14 6.10  6.14  274 6.122   0  70 
2010-09-10 09:34:00  6.14  6.15 6.13  6.13  472 6.133   0  96 
2010-09-10 09:35:00  6.13  6.14 6.13  6.13  291 6.133   0  68 
2010-09-10 09:36:00  6.13  6.13 6.11  6.11  548 6.123   0  97 
2010-09-10 09:37:00  6.11  6.11 6.11  6.11   67 6.110   0  26 

> na.locf(s, xout=seq(as.POSIXct(head(index(s), 1) - 60), as.POSIXct(tail(index(s), 1)), by="1 min")) -> ss 

> head(ss) 
        AMR.Open AMR.High AMR.Low AMR.Close AMR.Volume AMR.WAP AMR.hasGaps AMR.Count 
2010-09-10 09:32:00  6.08  6.10 6.07  6.10  298 6.087   0  39 
2010-09-10 09:33:00  6.10  6.14 6.10  6.14  274 6.122   0  70 
2010-09-10 09:34:00  6.14  6.15 6.13  6.13  472 6.133   0  96 
2010-09-10 09:35:00  6.13  6.14 6.13  6.13  291 6.133   0  68 
2010-09-10 09:36:00  6.13  6.13 6.11  6.11  548 6.123   0  97 
2010-09-10 09:37:00  6.11  6.11 6.11  6.11   67 6.110   0  26 

正如您在上面所看到的,返回的对象未按需要填充。

下面您可以看到我正确指定了开始和结束时间。

> as.POSIXct(head(index(s), 1) - 60) 
[1] "2010-09-10 09:31:00 EDT" 

> as.POSIXct(tail(index(s), 1)) 
[1] "2010-09-10 16:00:00 EDT" 
> 

难道这是因为日期范围有一个指定的时区而原始的POSIX索引没有?我试图通过指定tz =“”来删除tz,但不会将其删除。话虽如此,时区可能只是一个红鲱鱼。

我保存的数据的RDA(二进制)格式,如果有人有兴趣测试:

http://www.speedyshare.com/files/28576853/test.rda

欣赏的帮助。

+0

我真的不那么确定你所要求的在这里......我下载您的数据并查看索引,并且每隔一段时间就有一次。 'AMR'列为389个值,'attr(,“index”)为389。我看到没有缺失的数据点。现在,这个“在9:31失踪的第一点”,你有数据吗?我的意思是,你所要做的就是将索引和属性索引移动一位,并填写第一位索引。如果是这样的话,我可以帮你解决问题。否则,我真的不明白你的问题是什么.... – msikd65 2011-05-22 06:35:22

+0

嗨msikd65 - 谢谢你的回应。缺失的数据是在9:31发生的数据。由于当时我没有数据,所以我想复制9:32时存在的数据并将它插入到9:31时隙中。通过这种方式,我可以使时间序列与每隔一个非半天交易日和股票价格保持一致。我想执行需要常规时间序列的各种分析。感谢帮助。 – codingknob 2011-05-22 17:07:58

+0

你的数据是什么形式?我不是很熟悉这个.rda我假设存在一个数据框(可能叫做's'?)和所有的AMR数据? – msikd65 2011-05-22 17:24:39

回答

2

na.locf对数据进行操作,而不是索引。如果你想的NA行添加到数据,你需要做一个合适的XTS反对rbinds

miss <- xts(matrix(1*NA,1,NCOL(s)), first(index(s))-60) 
s <- rbind(miss,s) 
s <- na.locf(s, fromLast=TRUE) 
+1

这正是我需要的。谢谢。我也只是想通过以下方法也可以: “s < - merge(s,timeBasedSeq(paste(start(s),end(s),”M“,sep =”/“)))” 以下“s < - na.locf(s)” – codingknob 2011-05-30 17:06:13