我观察到,对于重叠时间序列的许多运算符,结果仅针对重叠部分给出,这很好:
> (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;窗户的结束时间似乎有点令人讨厌。欢迎任何建议。
答案 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.omit
,stats:::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
解决方案似乎有点容易。 ; - )