Мы можем использовать %/%
для разницы между 'dim' и значением first
для 'dim'
library(dplyr)
df %>%
mutate(x = (dim - first(dim)) %/% 20 + 1)
# id dim x
#1 1 25 1
#2 2 34 1
#3 3 60 2
#4 4 65 3
#5 5 80 3
#6 6 82 3
#7 7 90 4
#8 8 95 4
#9 9 110 5
#10 10 120 5
или опцией с findInterval
df %>%
mutate(x = findInterval(dim, seq(20, length.out = n(), by = 20), all.inside = TRUE))
данные
df <- structure(list(id = 1:10, dim = c(25, 34, 60, 65, 80, 82, 90,
95, 110, 120)), class = "data.frame", row.names = c(NA, -10L))