我有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
欣赏的帮助。
我真的不那么确定你所要求的在这里......我下载您的数据并查看索引,并且每隔一段时间就有一次。 'AMR'列为389个值,'attr(,“index”)为389。我看到没有缺失的数据点。现在,这个“在9:31失踪的第一点”,你有数据吗?我的意思是,你所要做的就是将索引和属性索引移动一位,并填写第一位索引。如果是这样的话,我可以帮你解决问题。否则,我真的不明白你的问题是什么.... – msikd65 2011-05-22 06:35:22
嗨msikd65 - 谢谢你的回应。缺失的数据是在9:31发生的数据。由于当时我没有数据,所以我想复制9:32时存在的数据并将它插入到9:31时隙中。通过这种方式,我可以使时间序列与每隔一个非半天交易日和股票价格保持一致。我想执行需要常规时间序列的各种分析。感谢帮助。 – codingknob 2011-05-22 17:07:58
你的数据是什么形式?我不是很熟悉这个.rda我假设存在一个数据框(可能叫做's'?)和所有的AMR数据? – msikd65 2011-05-22 17:24:39