Нам может понадобиться создать группирующую переменную, основанную на вхождении «stop», а затем получить разницу «Time_relative_s», которая соответствует местоположению первых значений «Start», «Stop» в «Modifier_1»
library(dplyr)
df1 %>%
group_by(grp = cumsum(lag(Modifier_1 == "Stop", default = FALSE))) %>%
mutate(diff = Time_relative_s[match("Stop", Modifier_1)] -
Time_relative_s[match("Start", Modifier_1)],
diff = replace(diff, row_number() > 1, NA_real_)) %>%
ungroup %>%
select(-grp)
# A tibble: 9 x 4
# Behavior Modifier_1 Time_relative_s diff
# <chr> <chr> <dbl> <dbl>
#1 BodyLength Start 122. 10.1
#2 Growl Start 130. NA
#3 Body Length Stop 132. NA
#4 Body Length Start 158. 101.
#5 Body Length Stop 259. NA
#6 Body Length Start 270. 25.2
#7 Bark Start 272. NA
#8 Growl Start 276. NA
#9 Body Length Stop 295. NA
данные
df1 <- structure(list(Behavior = c("BodyLength", "Growl", "Body Length",
"Body Length", "Body Length", "Body Length", "Bark", "Growl",
"Body Length"), Modifier_1 = c("Start", "Start", "Stop", "Start",
"Stop", "Start", "Start", "Start", "Stop"), Time_relative_s = c(122.11,
129.7, 132.26, 157.79, 258.85, 270.12, 272.26, 275.68, 295.37
)), row.names = c(NA, -9L), class = "data.frame")