【问题标题】:R time series finding indices with sign changeR时间序列查找具有符号变化的索引
【发布时间】:2014-11-17 00:13:19
【问题描述】:

我有一个如下的时间序列。我只是想找到tt+1 的观察值具有不同符号的索引。

显然,我可以通过获取t*(t-1)<0 所在的索引来实现这一点。但是我不确定实现此逻辑的最佳功能。

base 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")

【问题讨论】:

    标签: r time-series


    【解决方案1】:

    您也可以使用ts 对象来做到这一点,但我更多使用zooxts。所以这里是一个简单的动物园解决方案:

    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> 
    

    编辑:同样,要获取索引,您可以使用zoo提供的便利访问器:

    R> index(bz[which(c(NA,diff(sign(bz))) != 0)])
    [1] 17 28 36 38 42 47
    R> 
    

    编辑 2:如果您真的想坚持使用 ts 对象和基础 R,请通过 tsp() 重建索引系列并使用它:

    R> tsp(b)[1] + which(diff(sign(b)) != 0) * tsp(b)[3]
    [1] 17 28 36 38 42 47
    R> 
    

    【讨论】:

    • 谢谢 Dirk,ts 解决方案的语法是什么?
    • +1 这也适用于tswhich(diff(sign(b)) != 0) 获取更改前的最后一个索引或加 1 获取更改后的第一个索引就足够了。
    • 请看我的第三行——在它周围使用zoo 只是用于漂亮打印索引的语法糖。 实际解决方案是符号差异的计算——这是你的问题。
    • @Gabor:但是,一旦您使用该表达式进行索引,您就会得到 values,而不是 OP 要求的 indices。他的对象是退化的,因为索引只是一个序列,所以 here and just here 您可以重新索引到序列1:N,但这是一种特殊情况。我的回答比较笼统。但不是基础 R ...
    • @Zhubarb:为了完整起见,我添加了一个基础 R 解决方案。
    猜你喜欢
    • 2014-11-06
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 2020-04-09
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多