You can use the lag() / lead() function in dplyr, that takes the entry in the previous or next row in the dataset!
let's assume you stored your data in the dataframe called growth you can do the following:
growth_rate = growth %>%
# first sort by year
arrange(year) %>%
mutate(Diff_year = year - lag(year), # Difference in time (just in case there are gaps)
Diff_growth = route - lag(route), # Difference in route between years
Rate_percent = (Diff_growth / Diff_year)/route * 100) # growth rate in percent
Giving (used some random data as you didn't supplied the data in a way we could use it:
year route Diff_year Diff_growth Rate_percent
<dbl> <dbl> <dbl> <dbl> <dbl>
1 1957 135801 NA NA NA
2 1958 148023. 1 12222. 8.26
3 1959 146543. 1 -1480. -1.01
4 1960 131889. 1 -14654. -11.1
5 1961 146396. 1 14508. 9.91
6 1962 152252. 1 5856. 3.85
7 1963 149207. 1 -3045. -2.04
8 1964 144731. 1 -4476. -3.09
9 1965 153415. 1 8684. 5.66
10 1966 153415. 1 0 0
11 1967 162620. 1 9205. 5.66
Then the average growth rate can be calculated as:
Average_growth = mean(growth_rate$Rate_percent, na.rm = TRUE)
Hope the mathematics are correct and as you want to have it, but the direction should be clear!?
Matthias