Search code examples
rcountsequences

counts sequences in R


id  random  count
a   0        -1
a   1         1
a   1         2
a   0        -1
a   0        -2
a   1         1
a   0        -1
a   1         1
a   0        -1
b   0        -1
b   0        -2
b   1         1
b   0        -1
b   1         1
b   0        -1
b   0        -2
b   0        -3

id is a player , random is binary 0 or 1 , I want to create a count column that counts the sequences of 1's and 0's by player , preferably without loops since the database is very big.


Solution

  • Here's a dplyr solution

    dat %>%
      transform(idx = c(0,cumsum(random[-1L] != random[-length(random)]))) %>%
      group_by(id, idx) %>%
      mutate(count = -1*cumsum(random == 0) + cumsum(random == 1)) %>%
      ungroup() %>%
      select(-idx)
    
    Source: local data frame [17 x 3]
    
       id random count
    1   a      0    -1
    2   a      1     1
    3   a      1     2
    4   a      0    -1
    5   a      0    -2
    6   a      1     1
    7   a      0    -1
    8   a      1     1
    9   a      0    -1
    10  b      0    -1
    11  b      0    -2
    12  b      1     1
    13  b      0    -1
    14  b      1     1
    15  b      0    -1
    16  b      0    -2
    17  b      0    -3