Вы можете получить матрицу различий между кварталами в годовом исчислении следующим образом:
diffs <- sapply(1:4, function(i) diff(window(df, start = c(2010, i), deltat = 1)))
diffs
#> [,1] [,2] [,3] [,4]
#> [1,] 4 4 4 4
#> [2,] 4 4 4 4
#> [3,] 4 4 4 4
Конечно, в вашем примере годовые различия одинаковы, поэтому давайте получите лучший пример:
set.seed(69)
df <- ts(data.frame(x = runif(16)), start = c(2010, 1), frequency = 4)
df
#> Qtr1 Qtr2 Qtr3 Qtr4
#> 2010 0.53075401 0.76880773 0.64591522 0.86526041
#> 2011 0.36888274 0.86876479 0.17108433 0.78769062
#> 2012 0.17355491 0.02207173 0.88290272 0.35687300
#> 2013 0.92564366 0.25978334 0.18301182 0.26407276
diffs <- sapply(1:4, function(i) diff(window(df, start = c(2010, i), deltat = 1)))
diffs
#> [,1] [,2] [,3] [,4]
#> [1,] -0.1618713 0.09995706 -0.4748309 -0.07756979
#> [2,] -0.1953278 -0.84669305 0.7118184 -0.43081762
#> [3,] 0.7520888 0.23771161 -0.6998909 -0.09280024
Так что это просто случай нахождения индекса наибольшей абсолютной разницы. Мы хотим использовать which
вместо which.max
, так как это даст нам индексы массива, и, чтобы избежать ада с плавающей запятой, мы будем проверять приблизительное, а не точное равенство
which(abs(abs(diffs) - max(abs(diffs))) < 1e-9, arr.ind = TRUE)
#> row col
#> [1,] 2 2
Это означает, что наибольшая разница была во втором квартале между вторым и третьим годами, что мы можем подтвердить, посмотрев на df