Может быть, что-то вроде следующего будет делать то, что вы хотите.
fun <- function(DF, want = 7){
st <- which(DF[['Transition.State']] == want)
fc <- which(DF[['FoodCup']] == 1)
i <- findInterval(fc, st)
i <- i[is.finite(i)][1]
DF[['Time']][fc[i]] - DF[['Time']][st[i]]
}
fun(df1)
#[1] 43
fun(df1, 14)
#[1] 33
Данные в формате dput
.
df1 <-
structure(list(Subject = structure(c(1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L),
.Label = "KM6", class = "factor"), Time = c(435L, 455L, 648L,
658L, 691L, 698L, 721L, 741L,
758L, 762L, 810L, 814L, 815L, 819L, 820L, 821L, 822L, 824L,
829L, 862L, 863L), Current.State = c(16L, 15L, 4L, 7L, 14L,
16L, 16L, 15L, 4L, 4L, 4L, 7L, 7L, 7L, 7L, 14L, 14L, 14L,
14L, 14L, 16L), Transition.State = c(15L, 4L, 7L, 14L, 16L,
0L, 15L, 4L, 0L, 0L, 7L, 0L, 0L, 0L, 14L, 0L, 0L, 0L, 0L,
16L, 0L), Transition.Event = c(0L, 0L, 3L, 0L, 8L, 0L, 0L,
0L, 0L, 0L, 6L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 8L, 0L),
L2 = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), L1 = c(0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L), C = c(0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
1L, 1L, 0L, 0L, 1L, 0L, 1L, 0L, 0L), R2 = c(0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L), R1 = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), FoodCup = c(0L,
0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 1L, 1L)), class = "data.frame", row.names = c("14",
"15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25",
"26", "27", "28", "29", "30", "31", "32", "33", "34"))