我是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个周期,时间序列形状保持相对不变?
答案 0 :(得分:1)
我认为这里有一个基本的R解决方案。查看approx()
,它使用您指定的多个点n
执行线性(或常量)插值。在这里,我认为你想要n = 30
。
test2 <- approx(test, n=30)
plot(test2)
points(test, pch="*")
这会返回一个列表test2
,其中第二个元素y
是您的插值。我还没有使用你的时间序列对象,但它似乎完全是你的功能的内部,对吗?