1

次のようなデータフレーム内の 2 つの列で累積的な要約を実行したいと思います。

    A   B
    1   1
    1   2
    1   3
    1   4
    1   5
    2   6
    2   7
    2   8
    3   9
    3   10

最終的なデータフレームは次のようになります。

    A   B
    1   1
    1   2
    1   3
    1   4
    1   5
    2   1
    2   2
    2   3
    3   1
    3   2

基本的に私が求めているのは、col A が変更されるたびに 1 にリセットして、再度 cumsum の実行を開始するという条件で cumsum を実行するにはどうすればよいかということです。

ありがとう!

4

1 に答える 1

3

rleRには、 「ランレングスエンコーディング」の略で、非常に便利ですが、非常にひどい名前の関数があり、たまたまあなたが望むことを正確に行います。

x <- read.table(text=" A   B
    1   1
    1   2
    1   3
    1   4
    1   5
    2   6
    2   7
    2   8
    3   9
    3   10", header=TRUE)

x_rle <- rle(x$A)
x$new_col <- unlist(sapply(x_rle$lengths, function(x) {return(1:x)}))

結果:

> x
   A  B new_col
1  1  1       1
2  1  2       2
3  1  3       3
4  1  4       4
5  1  5       5
6  2  6       1
7  2  7       2
8  2  8       3
9  3  9       1
10 3 10       2
于 2013-02-06T03:37:10.950 に答える