Search code examples
rdataframedata-manipulationdata-cleaning

Mark Beginning and End of Runs in R


I have the following table and want to make a "Beginning" and "End" column with T/F values:

Trigger Beginning End
1 T F
1 F F
0 F T
1 T F
0 F T
1 T F
1 F F

How can this be done in R?

Many thanks


Solution

  • Base:

    df <- data.frame(Trigger = c(1, 1, 0, 1, 0, 1, 1))
    df$Beginning <- df$Trigger & !c(0, df$Trigger[-nrow(df)]) 
    df$End <- !df$Trigger & c(0, df$Trigger[-nrow(df)]
    

    tidyverse:

    mutate(
      df, 
      Beginning = Trigger & !lag(Trigger, default = FALSE),
      End = !Trigger & lag(Trigger, default = TRUE)  # May want to use FALSE depending on use case.
    )