Всегда полезно привести пример вашей проблемы, который может быть легко воспроизведен другими пользователями, поэтому снимок экрана не является оптимальным.Вот как вы создадите его в будущем:
library(data.table)
set.seed(1)
dt = data.table(x = sample(0:5, replace = TRUE, prob = c(0.5, rep(0.1,5)), size = 25))
Теперь для вашей актуальной проблемы вам сначала нужно создать идентификатор, который идентифицирует полосы ненулевых элементов, разделенных нулями:
dt[, id := rleid(x == 0)]
Далее вы можете вычислить максимум для каждой id-группы и поместить их в новый столбец:
dt[, max_val := max(x), by = id]
В результате получается:
x id max_val
1: 0 1 0
2: 0 1 0
3: 2 2 2
4: 1 2 2
5: 0 3 0
6: 5 4 5
7: 1 4 5
8: 3 4 5
9: 3 4 5
10: 0 5 0
11: 0 5 0
12: 0 5 0
13: 3 6 3
14: 0 7 0
15: 4 8 4
16: 0 9 0
17: 4 10 4
18: 1 10 4
19: 0 11 0
20: 4 12 4
21: 1 12 4
22: 0 13 0
23: 3 14 3
24: 0 15 0
25: 0 15 0
x id max_val
Технически, вы можете сделать обапошагово, используя
dt[, max_val2 := max(x), by = rleid(x == 0)]
, но я предпочел показать его в отдельных шагах.