4

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

> (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为非重叠数据创建 s:

> (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?或者,如果不是,那么获取结果并用 s 去除行的好方法是NA什么?这不是一个简单的下标问题,因为它失去了它的时间序列性质:

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

也许有些东西window(),但计算窗口的开始和结束时间似乎有点恶心。欢迎任何建议。

4

1 回答 1

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参数。您可以将其设置为FALSEstats:::.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解决方案似乎更容易一些。;-)

于 2012-07-19T20:04:54.283 回答