Что делает параметр "align" в rollapply? - PullRequest
0 голосов
/ 14 марта 2019

Я пытаюсь понять, что делает параметр align в rollapply.Я прочитал описание в документации ?rollapply (выровнять):

указывает, должен ли индекс результата быть выровненным по левому или правому краю или по центру (по умолчанию) по сравнению с окном прокруткинаблюдений.Этот аргумент используется только в том случае, если ширина представляет ширину.

Мне не ясно, что это значит, и нет примера.Подобный вопрос был задан здесь: выравнивание и смещения в rollapply , но никто не объяснил это.

Надеясь, что кто-то может объяснить это более подробно с некоторыми примерами.Я попытался экспериментировать, чтобы попытаться понять это лучше, но я не уверен, как меняются мои результаты, когда я пытаюсь настроить align = "right", "left" или "center".

Ответы [ 2 ]

1 голос
/ 14 марта 2019

Выравнивание по правому краю. Для следующего он вычисляет результат как 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
1 голос
/ 14 марта 2019

Вот пример:

library(zoo)
rollapply(1:10, c(1, 2, 3), sum, align = "right")
#1
#2+1
#3+2+1
#4
#5+4
#6+5+4
#7
#8+7
#9+8+7
#10

rollapply(1:10, c(1, 2, 3), sum, align = "center")
#1
#2+3
#2+3+4
#4
#5+6
#5+6+7
#7
#8+9
#8+9+10
#10

rollapply(1:10, c(1, 2, 3), sum, align = "left")
#1
#2+3
#3+4+5
#4
#5+6
#6+7+8
#7
#8+9
#omitted because there are not enough values, see partial
#10

Или проще с шириной одного числа:

rollapply(1:10, 3, sum, align = "right", partial = TRUE)
#[1]  1  3  6  9 12 15 18 21 24 27
rollapply(1:10, 3, sum, align = "center", partial = TRUE)
#[1]  3  6  9 12 15 18 21 24 27 19
rollapply(1:10, 3, sum, align = "left", partial = TRUE)
#[1]  6  9 12 15 18 21 24 27 19 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...