Как-то так?
Данные
DF <- tribble(~col1, ~val1, ~val2,
1, 1000, 5000,
2, 1500, 5500,
3, 2000, 6000,
4, 2500, 6500,
5, 25000, 29000,
6, 25500, 29500,
7, 26000, 30000,
8, 100, 4100,
9, 600, 4600)
Решение и вывод
library(dplyr)
DF %>%
mutate(diff = if_else(lead(val1) - val1 == 500, 500, 0),
group = cumsum(c(1, diff(diff) != 0))) %>%
group_by(group) %>%
mutate(total = sum(diff),
n = row_number()) %>%
ungroup %>%
filter(n == 1 & total > 0) %>%
select(-group, -diff, -n)
# A tibble: 3 x 4
# col1 val1 val2 total
# <dbl> <dbl> <dbl> <dbl>
# 1 1 1000 5000 1500
# 2 5 25000 29000 1000
# 3 8 100 4100 500
дайте мне знать если это работает!