Опция будет заключаться в том, чтобы создать логический вектор с rev
, равным «времени», сделать кумулятивную сумму и rev
срезать результат
library(dplyr)
df1 %>%
mutate(window = rev(cumsum(rev(time) == 6)))
# value time window
#1 1 3 3
#2 2 6 3
#3 3 9 2
#4 4 12 2
#5 5 15 2
#6 6 18 2
#7 7 21 2
#8 8 0 2
#9 9 3 2
#10 10 6 2
#11 11 18 1
#12 12 6 1
Или в base R
df1$window <- with(df1, rev(cumsum(rev(time) == 6)))
Данные
df1 <- structure(list(value = 1:12, time = c(3L, 6L, 9L, 12L, 15L, 18L,
21L, 0L, 3L, 6L, 18L, 6L)), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"))