これがデータなら
x = c(rep(328, 4), rep(349, 12))
それのランレングスエンコーディング表現を作成できます
r = rle(x)
次に、各実行の長さに等しいシーケンスを作成します
s = lapply(r$lengths, seq_len)
最後に、これらを元のデータに追加します (マイナス 1。前のステップで作成されたシーケンスは 1 から始まるため)。
unlist(Map("+", s, r$values - 1)
そう
> r = rle(x)
> unlist(Map("+", lapply(r$lengths, seq_len), r$values - 1))
[1] 328 329 330 331 349 350 351 352 353 354 355 356 357 358 359 360
(ただし、@DWinの使用seq
はよりクリーンです)。firstの値を順序付けすることはx
、まだ順序付けられていない場合でも意味があります。
> (x = sample(x))
[1] 349 349 349 349 349 349 328 349 349 328 328 328 349 349 349 349
> o = order(x)
> r = rle(x[o])
> unlist(Map(seq, r$values, length=r$length))[order(o)]
[1] 349 350 351 352 353 354 328 355 356 329 330 331 357 358 359 360