2

私は初心者の R ユーザーで、値が y より大きいデータ列内の x 連続値を検出する方法を見つけようとしています。例: 4 つ以上の連続するデータ ポイントの値が >=2 であるすべてのインスタンスを検索します。

ランレングス エンコーディングrle()コマンドは、これらの連続した値を識別するのに有望に見えます。

rle(dataset>=2)

しかし、長さが >=4 で値が「TRUE」になる条件をさらに設定する方法が見つかりません。

助言がありますか?

4

2 に答える 2

1
 res <- rle(dataset>=2)
 which( res$lengths>=4 & res$values==TRUE] )

これにより、圧縮された結果の表現でそれらが識別され、rleその結果を展開して、シーケンスの開始点を選択する必要があります。

于 2013-04-23T18:54:32.627 に答える
0

ベクトルを単純に変換し、その上で 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
于 2013-04-23T19:06:38.170 に答える