Вам необходимо создать группы, когда HOUR == 9
library(dplyr)
df %>%
group_by(gr = cumsum(HOUR == 9)) %>%
#Maybe you'll also need to add more groups
#group_by(STATION, CODE, gr = cumsum(HOUR == 9)) %>%
mutate(RAINFALL = hr_rain - lag(hr_rain, default = 0))
# STATION CODE DATE HOUR hr_rain RAINFALL
# <fct> <int> <fct> <int> <dbl> <dbl>
# 1 SHIVAMOGGA 163 06/09/18 0 1 1
# 2 SHIVAMOGGA 163 06/09/18 4 1 0
# 3 SHIVAMOGGA 163 06/09/18 5 1 0
# 4 SHIVAMOGGA 163 06/09/18 6 1.5 0.5
# 5 SHIVAMOGGA 163 06/09/18 7 2.5 1
# 6 SHIVAMOGGA 163 06/09/18 8 2.5 0
# 7 SHIVAMOGGA 163 06/09/18 9 0 0
# 8 SHIVAMOGGA 163 06/09/18 10 0.5 0.5
# 9 SHIVAMOGGA 163 06/09/18 11 0.5 0
#10 SHIVAMOGGA 163 06/09/18 12 0.5 0
# … with 14 more rows
data
df <- structure(list(STATION = structure(c(1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L), .Label = "SHIVAMOGGA", class = "factor"), CODE = c(163L,
163L, 163L, 163L, 163L, 163L, 163L, 163L, 163L, 163L, 163L, 163L,
163L, 163L, 163L, 163L, 163L, 163L, 163L, 163L, 163L, 163L, 163L,
163L), DATE = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("06/09/18",
"06/10/18"), class = "factor"), HOUR = c(0L, 4L, 5L, 6L, 7L,
8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 3L,
5L, 6L, 7L, 8L, 9L, 10L), hr_rain = c(1, 1, 1, 1.5, 2.5, 2.5,
0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5,
0.5, 0.5, 0.5, 0, 0)), class = "data.frame", row.names = c(NA, -24L))