Выравнивание по правому краю. Для следующего он вычисляет результат как y [i] = x [i-2] + x [i-1] + x [i]:
x <- 1:10
y <- rollapply(x, 3, sum, align = "right", fill = NA)
y
## [1] NA NA 6 9 12 15 18 21 24 27
Вычисления:
rollapply(x, 3, function(x) paste(x, collapse = "+"), align = "right", fill = NA)
## [1] NA NA "1+2+3" "2+3+4" "3+4+5" "4+5+6" "5+6+7"
## [8] "6+7+8" "7+8+9" "8+9+10"
Эквивалентный способ указать это с точки зрения смещений.То есть, передайте элементу 2 позиции назад, 1 позицию назад и текущую позицию в sum
:
rollapply(x, list(c(-2, -1, 0)), sum, fill = NA) # same as align = "right"
Выравнивание по центру. Для следующего он вычисляет результат как y [i] = x [i-1] + x [i] + x [i + 1]:
x <- 1:10
y <- rollapply(x, 3, sum, align = "center", fill = NA)
y
## [1] NA 6 9 12 15 18 21 24 27 NA
Вычисления:
rollapply(x, 3, function(x) paste(x, collapse = "+"), align = "center", fill = NA)
## [1] NA "1+2+3" "2+3+4" "3+4+5" "4+5+6" "5+6+7" "6+7+8"
## [8] "7+8+9" "8+9+10" NA
Эквивалентный способ указать эточерез смещения.То есть введите предыдущее, текущее и следующее значение для суммирования:
rollapply(x, list(c(-1, 0, 1)), sum, fill = NA) # same as align = "center"
Выравнивание по левому краю. Для следующего он вычисляет результат как y [i] = x [i] + x[i + 1] + x [i + 2]:
x <- 1:10
y <- rollapply(x, 3, sum, align = "left", fill = NA)
y
## [1] 6 9 12 15 18 21 24 27 NA NA
Вычисления:
rollapply(x, 3, function(x) paste(x, collapse = "+"), align = "left", fill = NA)
## [1] "1+2+3" "2+3+4" "3+4+5" "4+5+6" "5+6+7" "6+7+8" "7+8+9"
## [8] "8+9+10" NA NA
Это также может быть указано в терминах смещений.То есть используйте текущее, следующее и положение после следующего для подачи на sum
:
rollapply(x, list(c(0, 1, 2)), sum, fill = NA) # same as align = "left"
Примечание
Обратите внимание, что выравнивание вправо и по центру можно записать более компактно:
y <- rollapplyr(x, 3, sum, fill = NA) # note r on the end to denote right
y <- rollapply(x, 3, sum, fill = NA) # no align specified so center