我观察到,对于重叠时间序列上的许多运算符,只给出重叠部分的结果,这很好:
> (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有没有一种方法可以在不创建包含NA的行的情况下执行cbind()?或者,如果不是,什么是获取结果并使用NAs剥离行的好方法?这不是一个简单的下标问题,因为这样它就失去了时间序列的性质:
> mts[complete.cases(mts),]
ts1 ts2
[1,] 4 49
[2,] 5 36也许是window()的问题,但是计算窗口的开始和结束时间似乎有点麻烦。欢迎任何建议。
发布于 2012-07-20 04:04:54
为什么不直接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解决方案似乎更简单一点。;-)
https://stackoverflow.com/questions/11568326
复制相似问题