5

1 から 5 までの繰り返し値を含むベクトルがあり、その後に別のそのようなセットが続きますが、常にではありませんが、通常は 1 ずつインクリメントされます。例えば、

c(1,1,1,1,1, 2,2,2,2, 3,3, 4,4,4,4,4)

これを操作して、繰り返し与えられた場合にのみ各値に 0.2 の増分を追加するようにしたいと思います。

c(1,1.2,1.4,1.6,1.8, 2,2.2,2.4,2.6, 3,3.2, 4,4.2,4.4,4.6,4.8)

これは for ループを使用して非常に簡単に行うことができますが、最初のベクトルは 100 万を超えるエントリの長さであり、かなりの時間がかかります。私は、運がなければリストベースの方法を考え出そうとしています。任意の提案をいただければ幸いです。

4

4 に答える 4

3

以下に 1 つの可能性を示します (各数値のセットが 2 つ以上になることはなく、各数値の繰り返しが最大 5 回であるという条件が与えられた場合):

myvec <- c(1,1,1,1,1, 2,2,2,2, 3,3, 4,4,4,4,4)
myvec + seq(0, .8, .2)[ave(myvec, myvec, FUN = seq_along)]
# [1] 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 3.0 3.2 4.0 4.2 4.4 4.6 4.8

ベクトルで繰り返される数値を処理する場合のより良い代替手段については、@mnel と @thelatemail の回答を参照してください。

于 2013-09-27T04:07:13.327 に答える