我有一个大型数据框来跟踪累积奖金游戏的销售情况。累积奖金上升,直到有人点击它,然后重置为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。
我错过了什么?
答案 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