Hi,
Something like this (see the distance column)?
library(tidyverse)
df <- tibble(letters = sample(LETTERS[1:10], 50, replace = TRUE)) %>%
mutate(row_id = row_number())
df %>%
group_by(letters) %>%
mutate(distance = row_id - lag(row_id)) %>%
arrange(letters)
#> # A tibble: 50 x 3
#> # Groups: letters [10]
#> letters row_id distance
#> <chr> <int> <int>
#> 1 A 1 NA
#> 2 A 40 39
#> 3 A 41 1
#> 4 A 43 2
#> 5 B 6 NA
#> 6 B 20 14
#> 7 B 46 26
#> 8 B 48 2
#> 9 C 3 NA
#> 10 C 18 15
#> # ... with 40 more rows
Created on 2021-02-24 by the reprex package (v1.0.0)