将时间序列扩展到特定数量的句点

时间:2014-03-24 17:41:16

标签: r time-series expand

我是R的新手,我正在尝试使用一组时间序列并通过条件推理树运行它们,以帮助对时间序列的形状进行分类。问题在于,并非所有时间都具有相同数量的周期。我试图将每个时间序列扩展为30个周期,但仍然保持相同的形状"。这是我所拥有的

     Require(zoo)

                test<-c(606,518,519,541,624,728,560,512,777,728,1014,1100,930,798,648,589,680,635,607,544,566)
            accordion<-function(A,N){
                x<-ts(scale(A), start=c(1,1), frequency=1)
                X1 <- zoo(x,seq(from = 1, to = N, by =(N-1)/(length(x)-1) ))
                X2<-merge(X1, zoo(order.by=seq(start(X1), end(X1)-1, by=((N-1)/length(x))/(N/length(x)))))
            X3<-na.approx(X2)
            return(X3)}
        expand.test<-accordion(test,30)
plot(expand.test); lines(scale(test))
        length(expand.test)

上面的代码,缩放时间序列,然后将其均匀地分隔为30个周期并插入缺失值。但是,返回的系列的长度是42个单位而不是30个,但它保持相同的形状&#34;作为原始时间序列。有没有人知道如何修改它,以便函数accordian产生的结果长30个周期,时间序列形状保持相对不变?

1 个答案:

答案 0 :(得分:1)

我认为这里有一个基本的R解决方案。查看approx(),它使用您指定的多个点n执行线性(或常量)插值。在这里,我认为你想要n = 30

test2 <- approx(test, n=30)
plot(test2)
points(test, pch="*")

这会返回一个列表test2,其中第二个元素y是您的插值。我还没有使用你的时间序列对象,但它似乎完全是你的功能的内部,对吗?