rsequencerun-length-encoding

Create counter of consecutive runs of a certain value


I have data where consecutive runs of zero are separated by runs of non-zero values. I want to create a counter for the runs of zero in the column 'SOG'.

For the first sequence of 0 in SOG, set the counter in column Stops to 1. For the second run of zeros, set 'Stops' to 2, and so on.

SOG Stops
--- -----
4   0
4   0
0   1
0   1
0   1
3   0
4   0
5   0
0   2
0   2
1   0
2   0
0   3
0   3
0   3

Solution

  • SOG <- c(4,4,0,0,0,3,4,5,0,0,1,2,0,0,0)
    #run length encoding:
    tmp <- rle(SOG)
    #turn values into logicals
    tmp$values <- tmp$values == 0
    #cumulative sum of TRUE values
    tmp$values[tmp$values] <- cumsum(tmp$values[tmp$values])
    #inverse the run length encoding
    inverse.rle(tmp)
    #[1] 0 0 1 1 1 0 0 0 2 2 0 0 3 3 3