Create variable rolling counter in R

have a dataset with a size of about 21k in cases and a categorical variable for each case with options A, B and C. I am looking to create an experience variable for countries that have previously used option C in previous observations (case t -1, to put it simply) ... I was told that this is called a hot wall. I have not been able to figure out how to do this or which package is the best to use. Any suggestions would be very helpful!

dispute=c("1","1","1","2","2","2","2","3","3","3")
partner=c("1","2","3","1","2","3","4","2","1","3")
position=c("A","C","C","B","C","A","C","B","C","C")

      

Currently my data looks something like this:

Dispute Partner Position
1        1       A
1        2       C
1        3       C
2        1       B
2        2       C
2        3       A
2        4       C
3        1       B
3        2       C
3        3       C

      

Ideally, I create a variable that cumulatively accounts for when each unique observation is C (generating an "experience" count for each unique "partner"

Dispute Partner Position Experience
1        1       A       NA
1        2       C       1
1        3       C       1
2        1       B       NA
2        2       C       2
2        3       A       NA
2        4       C       1
3        1       B       NA
3        2       C       3

      

+3


source to share


1 answer


FROM data.table

library(data.table)
setDT(df)[, experience:=cumsum(position=="C")*(position=="C"), by=partner] 

    dispute partner position experience
 1:       1       1        A          0
 2:       1       2        C          1
 3:       1       3        C          1
 4:       2       1        B          0
 5:       2       2        C          2
 6:       2       3        A          0
 7:       2       4        C          1
 8:       3       2        B          0
 9:       3       1        C          1
10:       3       3        C          2   

      

FROM dplyr



library(dplyr)
df %>% 
  group_by(partner) %>% 
  mutate(experience=cumsum(position=="C")*(position=="C"))

   dispute partner position experience
1        1       1        A          0
2        1       2        C          1
3        1       3        C          1
4        2       1        B          0
5        2       2        C          2
6        2       3        A          0
7        2       4        C          1
8        3       2        B          0
9        3       1        C          1
10       3       3        C          2

      

<strong> data

df <- data.frame(dispute=c("1","1","1","2","2","2","2","3","3","3"),
                     partner=c("1","2","3","1","2","3","4","2","1","3"),
                     position=c("A","C","C","B","C","A","C","B","C","C"))

      

+5


source







All Articles