基于另一列“重置”中的值按顺序编号实例

时间:2014-02-21 13:51:16

标签: r

我有一个大型数据框来跟踪累积奖金游戏的销售情况。累积奖金上升,直到有人点击它,然后重置为100000或125000.我想在整个数据中编号累积奖金。数据如下所示:

sales     jp   newrun
367890  125000  1
359497  225000  0
686205  420000  0
693497  560000  0
405268  125000  1
316572  125000  1
438263  225000  0
586050  375000  0
902894  600000  0
377326  125000  1
369216  225000  0
400330  125000  1
433491  225000  0
681295  410000  0
881837  600000  0

其中newrun是一个假人,表示累积奖金重置。这是dput():

structure(list(sales = c(367890, 359497, 686205, 693497, 405268, 
316572, 438263, 586050, 902894, 377326, 369216, 400330, 433491, 
681295, 881837), 
    jp = c(125000, 225000, 420000, 560000, 125000, 
    125000, 225000, 375000, 6e+05, 125000, 225000, 125000, 225000, 
    410000, 6e+05),
    newrun = c(1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 
1L, 0L, 1L, 0L, 0L, 0L)), .Names = c("sales", "jp", "newrun"), row.names = c(NA, 
    15L), class = "data.frame")

我希望最终得到:

sales     jp   newrun  run
367890  125000  1       1
359497  225000  0       1
686205  420000  0       1
693497  560000  0       1
405268  125000  1       2
316572  125000  1       3
438263  225000  0       3
586050  375000  0       3
902894  600000  0       3
377326  125000  1       4
369216  225000  0       4
400330  125000  1       5
433491  225000  0       5
681295  410000  0       5
881837  600000  0       5

我试过了:

>runs<-c(1, cumsum(diff(as.logical(rowSums(
     c5a[c("newrun")] != 0)))>0) + 1)

几乎可以工作,但它没有识别第一天(当它是10万美元或125,000美元时)中奖的情况。它只是将那些进入下一次运行(所以,在上面的例子中,而不是运行1,1,1,1,2,3,3,3,3,1,1,1,2,2 ,2,2,2,2。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

我错过了什么或你只是想要:

c5a$run <- cumsum(c5a$newrun)
c5a
    sales     jp newrun run
1  367890 125000      1   1
2  359497 225000      0   1
3  686205 420000      0   1
4  693497 560000      0   1
5  405268 125000      1   2
6  316572 125000      1   3
7  438263 225000      0   3
8  586050 375000      0   3
9  902894 600000      0   3
10 377326 125000      1   4
11 369216 225000      0   4
12 400330 125000      1   5
13 433491 225000      0   5
14 681295 410000      0   5
15 881837 600000      0   5