【问题标题】:Filling missing data in xts stock price object填充 xts 股票价格对象中的缺失数据
【发布时间】:2011-08-29 18:53:26
【问题描述】:

我有 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

感谢您的帮助。

【问题讨论】:

  • 我真的不太确定您在这里要求什么...我下载了您的数据并查看了索引,并且每次都在每个连续的时间间隔出现。 AMR 列有 389 个值,attr(,"index") 有 389 个值。我没有看到丢失的数据点。现在,这个“9:31 丢失的第一点”,你有数据吗?我的意思是你所要做的就是将索引和属性的索引移动一个并填写第一个。如果是这种情况,我可以帮你解决这个问题。否则我真的不明白你的问题是什么......
  • 您好 msikd65 - 感谢您的回复。缺失的数据是发生在 9:31 的数据。由于我没有那个时间的数据,我想复制 9:32 存在的数据并将其插入 9:31 的时间段。通过这种方式,我可以使时间序列与每隔一个非半天交易日和整个股票价格保持一致和一致。我想执行需要定期时间序列的各种分析。感谢您的帮助。
  • 你的数据是什么形式的?我对这个 .rda 不是很熟悉,我假设存在一个包含所有 AMR 数据的数据框(可能称为“s”?)?
  • 好吧,现在我看你正在使用我完全不熟悉的 zoo 和 xts。我可以提出一个非常丑陋的解决方法,但这取决于数据框中的数据......
  • 您好 msikd65 - 感谢您抽出宝贵时间。对不起给您带来不便。我正在使用对象类型 xts,因为我使用了需要数据类型为 xts 的各种包中的函数。从表面上看,手头的问题似乎相当直接,我在帖子正文中提供的链接应该可以解决 xts 对象的问题,但由于某种原因,我无法让它与我的对象一起使用。看起来这是对于处理金融时间序列数据的人来说,这是一个常见问题,因为数据质量通常是一个问题。因此,必须有一种方法可以将元素插入 xts 对象。

标签: r xts


【解决方案1】:

na.locf 操作的是数据,而不是索引。如果要在数据中添加一行NA,则需要为rbind 到s 制作一个合适的xts 对象:

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

【讨论】:

  • 这正是我所需要的。谢谢你。我也刚刚发现以下内容也有效:“s
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-22
  • 1970-01-01
  • 1970-01-01
  • 2011-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多