1

我想在数据框中的两列上运行累积摘要,如下所示:

    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

R 有一个非常有用但名称非常糟糕的函数rle,它代表“运行长度编码”,它恰好可以满足您的需求。

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 回答