Вы можете использовать, например,
(df$Var2 <- cumsum(df$Var1 == "start"))
# [1] 1 1 2 2 2 2 2 3 3 3
, если вы хотите просто целое число для представления групп, или, как в вашем примере,
(df$Var2 <- LETTERS[cumsum(df$Var1 == "start")])
# [1] "A" "A" "B" "B" "B" "B" "B" "C" "C" "C"
В dplyr
, что соответствует
df %>% mutate(Var2 = cumsum(Var1 == "start"))
df %>% mutate(Var2 = LETTERS[cumsum(Var1 == "start")])