我正在处理刻度数据,并希望将我的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系列中缺失。 有什么想法吗?
感谢
答案 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")