Вы можете использовать lag
в dplyr
library(dplyr)
abc %>% group_by(country) %>% mutate(rate = count/lag(count))
# country date count rate
# <fct> <fct> <int> <dbl>
#1 A 2020-03-01 1 NA
#2 A 2020-03-02 2 2
#3 A 2020-03-03 3 1.5
#4 B 2020-03-01 2 NA
#5 B 2020-03-02 5 2.5
#6 B 2020-03-03 10 2
#7 C 2020-03-01 1 NA
#8 C 2020-03-02 3 3
#9 C 2020-03-03 6 2
shift
в data.table
library(data.table)
setDT(abc)[, rate := count/shift(count), country]
или head
/ tail
в базе R для сделай это.
abc$rate <- with(abc, ave(count, country, FUN = function(x)
c(NA, tail(x, -1)/head(x, -1))))