没有NA的cbind()时间序列

时间:2012-07-19 19:58:00

标签: r time-series

我观察到,对于重叠时间序列的许多运算符,结果仅针对重叠部分给出,这很好:

> (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()似乎并非如此。在输出正确对齐的同时,为非重叠数据创建NA

> (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获取结果和剥离行的好方法是什么?这不是一个简单的下标问题,因为它失去了时间序列的本质:

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

也许有window()的东西,但计算开始&amp;窗户的结束时间似乎有点令人讨厌。欢迎任何建议。

1 个答案:

答案 0 :(得分: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解决方案似乎有点容易。 ; - )