Если вы просто хотите убедиться, что скачок равен 3 или 7, вы можете написать вспомогательную функцию, которая будет увеличиваться при возникновении скачка другого размера
jumpchange <- function(x) c(0,cumsum(!diff(x) %in% c(3,7)))+1
Затем вы можете применить это к каждомупроще всего группировать с помощью dplyr
library(dplyr)
dd %>% group_by(ID) %>%
mutate(persistence = jumpchange(Col))
или вы можете использовать transform/ave
только с базовой базой R
transform(dd, persistence=ave(Col, ID, FUN=jumpchange))