2012-07-19 67 views
4

我已经观察到,对于在重叠的时间系列许多运营商,因此仅给出了重叠部,这是好的:cbind()返回时间序列的NA无

> (ts1 <- ts(1:5, start=1, freq=3)) 
Time Series: 
Start = c(1, 1) 
End = c(2, 2) 
Frequency = 3 
[1] 1 2 3 4 5 
> (ts2 <- ts((7:3)^2, start=2, freq=3)) 
Time Series: 
Start = c(2, 1) 
End = c(3, 2) 
Frequency = 3 
[1] 49 36 25 16 9 
> ts1 + ts2 
Time Series: 
Start = c(2, 1) 
End = c(2, 2) 
Frequency = 3 
[1] 53 41 

然而,这并不似乎是cbind()的情况。

> (mts <- cbind(ts1, ts2)) 
Time Series: 
Start = c(1, 1) 
End = c(3, 2) 
Frequency = 3 
     ts1 ts2 
1.000000 1 NA 
1.333333 2 NA 
1.666667 3 NA 
2.000000 4 49 
2.333333 5 36 
2.666667 NA 25 
3.000000 NA 16 
3.333333 NA 9 

是否有执行cbind()不会产生在他们NA行的方式:当输出正确对齐,NA s的对非重叠的数据产生的?或者,如果不是的话,有什么方法可以取得结果并剥离NA?这不是下标一件简单的事情,因为这样就失去了时间序列性质:

> mts[complete.cases(mts),] 
    ts1 ts2 
[1,] 4 49 
[2,] 5 36 

或许真的有window(),但计算开始&结束时间窗口似乎有点令人讨厌。任何建议是受欢迎的。

回答

4

为什么不只是na.omit的结果?

> na.omit(cbind(ts1,ts2)) 
Time Series: 
Start = c(2, 1) 
End = c(2, 2) 
Frequency = 3 
     ts1 ts2 
2.000000 4 49 
2.333333 5 36 

如果你想避免na.omitstats:::cbind.ts调用stats:::.cbind.ts,其中有一个union说法。您可以设置到FALSE并直接调用stats:::.cbind.ts(创建相应的参数后):

> stats:::.cbind.ts(list(ts1,ts2),list('ts1','ts2'),union=FALSE) 
Time Series: 
Start = c(2, 1) 
End = c(2, 2) 
Frequency = 3 
     ts1 ts2 
2.000000 4 49 
2.333333 5 36 

na.omit解决方案似乎稍微容易。 ;-)

+0

太棒了!我不知道'na.omit'可以这样称呼,谢谢。 – 2012-07-19 21:00:07

+0

事实上,我也很高兴看到'stats :::。cbind.ts'版本,因为对于大型时间序列,可能需要一段时间来执行'na.omit'步骤。 – 2012-07-19 21:39:02