4

連続した値の実行を持つベクトルがあるとします。

v <- c(1, 1, 1,  2, 2, 2, 2,  1, 1,  3, 3, 3, 3)

実行ごとに 1 つの値と各実行の長さに減らすにはどうすればよいでしょうか。つまり、最初の実行は12 回繰り返されます。2 回目: 24 回繰り返します。3 回目の実行: 12 回繰り返し、など:

v.df <- data.frame(value = c(1, 2, 1, 3),
                   repetitions = c(3, 4, 2, 4))

手続き型言語では、ループを反復処理して data.frame を構築するだけかもしれませんが、R の大規模なデータセットでは、このようなアプローチは非効率的です。何かアドバイス?

4

2 に答える 2

12

またはもっと簡単に

data.frame(rle(v)[])
于 2010-06-10T00:43:42.187 に答える
8
with(rle(v), data.frame(values, lengths))

必要なものが得られるはずです。

values lengths
     1       3
     2       4
     1       2
     3       4
于 2010-06-10T00:06:08.057 に答える