そのため、調査の複数の管理の問題に対処したい調査データがあります (コンピューターが失敗し、ブラウザーが閉じられ、人々が再起動されました)。同じ人がこの順序で実行したケース x1 と x2 があるとします (ここでは、すでにベクトルとして抽出されています)。
x1 <- c(1:35, rep(NA, 65))
x2 <- c(-1:-95, rep(NA, 5))
x1 が最初に発生したことがわかっているので、x1 の過去の最初の NA を特定したいので、それ以降のすべてのエントリは NA (位置 36) です。
これを実行できる関数を見つけたいと思います。
n <- {function that computes this value}
x <- c(x1[1:(n-1)], x2[n:length(x2)])
ここでの出力は次のようになります。
c(1:35, -36:-95, rep(NA, 5))
length(na.omit(x1)) + 1
エンドポイントの前に NA があり、インデックス作成が中断される可能性があるため、次のようなアプローチは機能しません。たとえば、次の場合でもインデックス 36 を見つける必要があります。
x1 <- c(1:12, NA, 13:35, rep(NA, 65))
97% は NA だけで機能するためにこれを必要としていますが、一般的な解決策も素晴らしいでしょう (つまり、必要に応じて "" または類似のものにも一致する可能性があります)。
ランレングスエンコーディングの使用
n <- with(rle(is.na(x1)), lengths[length(lengths) -1 ] + 1 )
x <- c(x1[1:(n-1)], x2[n:length(x2)])
# [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
# [30] 30 31 32 33 34 35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58
# [59] -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87
# [88] -88 -89 -90 -91 -92 -93 -94 -95 NA NA NA NA NA
asrle
の実行の長さNA
(または指定したもの) を指定します。そして、これらの最後の実行を使用したいので、最後の実行の開始点を選択できます
> rle(is.na(x1))
Run Length Encoding
lengths: int [1:2] 35 65
values : logi [1:2] FALSE TRUE
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加