填写xts股票价格对象中的缺失数据

时间:2011-05-20 15:50:44

标签: r xts

我有1分钟的日内价格数据,缺少数据点。因此我想填补它们。

我仔细阅读了以下帖子中的建议并尝试了类似的程序: R: Filling missing dates in a time series?

在我的情况下,缺失的数据点是第一笔交易,即09: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

感谢帮助。

1 个答案:

答案 0 :(得分:2)

na.locf对数据进行操作,而不是对索引进行操作。如果您要为数据添加一行NA,则需要将rbind的{​​x}对象设为s

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