3

我正在处理刻度数据,并希望将我的 xts 不规则间隔系列聚合成一个 1 秒的同质系列。因此,我使用 xts 包函数 to.period :

price_1m <-to.period(price,period="seconds",k=1,OHLC=FALSE)

这是我得到的:

2010-02-02 08:00:03 2787
2010-02-02 08:00:04 2786
2010-02-02 08:00:05 2787
2010-02-02 08:00:06 2787
2010-02-02 08:00:07 2786
2010-02-02 08:00:08 2786
2010-02-02 08:00:09 2786
2010-02-02 08:00:10 2787
2010-02-02 08:00:11 2786
2010-02-02 08:00:14 2786
2010-02-02 08:00:16 2786
2010-02-02 08:00:18 2787

我的系列是聚合的,但例如在 08:00:13 和 08:00:15 时缺少刻度数据。我想要的是用以前的分时数据填充这些空白,因为知道在逐个分时 xts 系列中缺少 08:00:13 和 08:00:15 的价格。任何的想法?

谢谢

4

2 回答 2

6

您可以price_1m与一个“空” xts 对象合并,该对象包含一个具有您想要的规则间隔的索引的索引,并在其na.locf上使用。例如:

onemin <- seq(start(price_1m),end(price_1m),by="1 s")
Price_1m <- na.locf(merge(price_1m, xts(,onemin)))
于 2012-07-26T13:33:12.857 回答
1

MakeStrictlyRegular我的qmao 包中的函数将为您执行此操作。

这是来自的示例?MakeStrictlyRegular

x <- align.time(.xts(1:1000, 60*1:1000))[-c(2, 4, 7, 8), ] # remove some rows at the begining
head(x[paste((start.x <- start(x)), "/")])
#                    [,1]
#1969-12-31 18:02:00    1
#1969-12-31 18:04:00    3
#1969-12-31 18:06:00    5
#1969-12-31 18:07:00    6
#1969-12-31 18:10:00    9
#1969-12-31 18:11:00   10
x2 <- MakeStrictlyRegular(x)
#added 4 (0.40%); There are now 1000 total rows.
head(x2[paste(start.x, "/")])
#                    [,1]
#1969-12-31 18:02:00    1
#1969-12-31 18:03:00    1
#1969-12-31 18:04:00    3
#1969-12-31 18:05:00    3
#1969-12-31 18:06:00    5
#1969-12-31 18:07:00    6

对于您的 1 秒数据,您将使用by="sec". 所以,像

MakeStrictlyRegular(price, by="sec")
于 2012-07-26T18:20:47.030 回答