我有一个时间序列如下.我只是想找到观察所在的指数t并且t+1有不同的符号.
显然,我可以通过将索引放在哪里来实现这一目标t*(t-1)<0.但是我不确定实现这种逻辑的最佳功能.
在基地R中实现这一目标的最快方法是什么?
b <- structure(c(NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.00117300000000009,
0.00165400000000004, 0.00262999999999991, 0.00236499999999995,
0.00571200000000016, 0.00364100000000001, 0.0013479999999999,
-0.0013510000000001, -0.00270499999999996, -0.00338699999999981,
-0.000166000000000111, -0.00105099999999991, -0.002467, -0.00367300000000004,
-0.00569500000000001, -0.00446499999999994, -0.002861, -0.00129699999999988,
0.000721000000000194, 0.00351799999999969, 0.0040929999999999,
0.00418700000000016, 0.004189, 0.00348199999999999, 0.0015729999999996,
5.89999999998092e-05, -0.000866000000000255, -0.00130799999999986,
0.00158199999999997, 0.00198000000000009, 0.00180899999999995,
0.000526999999999944, -0.000598000000000098, -0.00189899999999987,
-0.00285700000000011, -0.00296200000000013, -0.000966000000000244,
0.00388200000000016, 0.00311499999999998, 0.00300600000000006
), .Tsp = c(1, 49, 1), class = "ts")
Run Code Online (Sandbox Code Playgroud)
你也许可以做到这一点ts了对象,但我的工作多与更多zoo或xts.所以这是动物园的简单解决方案:
R> suppressMessages(library(zoo))
R> bz <- as.zoo(b)
R> bz[which(c(NA,diff(sign(bz))) != 0)]
17 28 36 38 42 47
-0.001351 0.000721 -0.000866 0.001582 -0.000598 0.003882
R>
Run Code Online (Sandbox Code Playgroud)
编辑:同样,要获得索引,您可以使用由zoo以下提供的便利访问器:
R> index(bz[which(c(NA,diff(sign(bz))) != 0)])
[1] 17 28 36 38 42 47
R>
Run Code Online (Sandbox Code Playgroud)
编辑2:如果你真的想坚持使用ts对象和基础R,重建索引系列tsp()并使用它:
R> tsp(b)[1] + which(diff(sign(b)) != 0) * tsp(b)[3]
[1] 17 28 36 38 42 47
R>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |