R:当缺少刻度数据时,勾选数据增加值

时间:2012-07-26 13:04:33

标签: r time-series xts

我正在处理刻度数据,并希望将我的xts不规则间隔系列聚合成1秒均匀系列。因此我使用xts包函数来.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时缺少刻度数据。我想要的是用先前的刻度数据填充那些空白,因为我们知道08:00:13和08:00:15的价格在逐字记录的xts系列中缺失。 有什么想法吗?

感谢

2 个答案:

答案 0 :(得分:6)

您可以将price_1m与&#34;空&#34;合并xts对象包含一个所需间隔为规则间隔的索引,在其上使用na.locf。例如:

onemin <- seq(start(price_1m),end(price_1m),by="1 s")
Price_1m <- na.locf(merge(price_1m, xts(,onemin)))

答案 1 :(得分:1)

qmao package中的MakeStrictlyRegular功能会为您执行此操作。

以下是?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")