【问题标题】:In R, how can one detect consecutive data points within a column of data which have a value >y only when they appear more than x times consecutively?在 R 中,如何检测一列数据中的连续数据点,只有当它们连续出现超过 x 次时,它们的值 >y?
【发布时间】:2013-04-24 03:06:38
【问题描述】:

我是 R 初学者,我正在尝试找到一种方法来检测一列数据中的 x 个连续值,这些值的值 >=y。 示例:查找 4 个或更多连续数据点的值 >=2 的所有实例

运行长度编码 rle() 命令看起来很有希望识别这些连续值:

rle(dataset>=2)

但我找不到进一步将长度设置为 >=4 并将值设置为“TRUE”的条件。

有什么建议吗?

【问题讨论】:

    标签: r


    【解决方案1】:
     res <- rle(dataset>=2)
     which( res$lengths>=4 & res$values==TRUE] )
    

    这将在rle 结果的压缩表示中识别它们,然后您需要扩展该结果并挑选序列的起点。

    【讨论】:

      【解决方案2】:

      您可以简单地转换向量,然后在其上使用 rle:

      res = rle(runif(1000, 0, 4) >= 2)
      res
      Run Length Encoding
        lengths: int [1:491] 2 2 2 2 3 1 3 2 7 1 ...
        values : logi [1:491] TRUE FALSE TRUE FALSE TRUE FALSE ...
      

      要获取运行所在向量中的索引,您可以使用以下技巧:

      res$values = res$lengths > 4
      inv_res = inverse.rle(res)
      seq_along(inv_res)[inv_res]
        [1]   3   4   5   6   7   8   9  10  11  12  13  37  38  39  40  41  42  74
       [19]  75  76  77  78  79  80  81  82  83  84  85 108 109 110 111 112 142 143
       [37] 144 145 146 147 148 221 222 223 224 225 226 235 236 237 238 239 240 241
       [55] 278 279 280 281 282 305 306 307 308 309 310 311 312 313 314 315 316 317
       [73] 318 319 342 343 344 345 346 347 414 415 416 417 418 419 430 431 432 433
       [91] 434 435 449 450 451 452 453 472 473 474 475 476 477 478 523 524 525 526
      [109] 527 545 546 547 548 549 561 562 563 564 565 566 567 568 569 607 608 609
      [127] 610 611 612 613 625 626 627 628 629 630 646 647 648 649 650 651 652 699
      [145] 700 701 702 703 765 766 767 768 769 770 771 772 773 789 790 791 792 793
      [163] 794 795 800 801 802 803 804 810 811 812 813 814 850 851 852 853 854 855
      [181] 869 870 871 872 873 879 880 881 882 883 904 905 906 907 908 909 919 920
      [199] 921 922 923 949 950 951 952 953 954 955 956 957 958 959 960 961
      

      【讨论】:

        猜你喜欢
        • 2022-09-27
        • 1970-01-01
        • 2022-11-22
        • 2021-07-20
        • 2021-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多