2012-07-19 68 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