Может быть, проще думать в терминах смещения. Если вы хотите окно 3, то
align = "right"
соответствует использованию окна на основе смещений -2, -1, 0, т. е. точки перед предыдущей, предыдущей и текущей точкой. Текущая точка — крайний правый конец окна. Обратите внимание, что rollapplyr
с r
в конце равносильно указанию align = "right"
.
align = "center"
соответствует использованию окна на основе смещений -1, 0, 1, т. е. предыдущей точки, текущей точки и следующей точки. Текущая точка — центр окна. Это значение по умолчанию для align=
.
align = "left"
соответствует использованию окна на основе смещений 0, 1, 2, т.е. текущей точки, следующей точки и точки после этой. Текущей точкой является крайняя левая точка окна.
rollapply
позволяет использовать спецификацию align=
или нотацию смещения. Чтобы использовать последний для width
, укажите список, содержащий один вектор, определяющий смещения. (Фактическая спецификация ширины заключается в указании вектора ширины, по одному для каждого элемента ввода или списка векторов смещения; однако в обоих случаях они повторяются, поэтому обычный случай указания одной скалярной ширины или списка, содержащего одиночный вектор смещения является частным случаем.)
окончание окна в текущей точке
Ниже мы используем align=
для получения среднего значения окна из 3, заканчивающегося текущей точкой, а также используем смещения в качестве альтернативы. Мы показываем как фреймы данных, так и объекты зоопарка.
Мы опустили fill=NA
для объектов зоопарка, поскольку они в любом случае автоматически выравниваются, поэтому обычно в этом нет необходимости.
library(zoo)
r1 <- transform(dat, roll = rollapplyr(x, 3, mean, fill = NA))
r2 <- transform(dat, roll = rollapply(x, list(seq(-2, 0)), mean, fill = NA))
all.equal(r1, r2)
## [1] TRUE
z <- read.zoo(dat, FUN = identity)
r3 <- rollapplyr(z, 3, mean)
r4 <- rollmeanr(z, 3)
r5 <- rollapply(z, list(seq(-2, 0)), mean) # z from above
all.equal(r3, r4, r5)
## [1] TRUE
окно заканчивается в предыдущей точке
Если вам нужны 3 предыдущие точки, то есть смещения -3, -2, -1, то есть не текущая точка, а 3 точки до нее, тогда будет работать следующее. Обратите внимание, что lag
в последней строке требует временного ряда и не должен использоваться с простыми векторами.
# r6 is data frame
r6 <- transform(dat, roll = rollapply(x, list(-seq(3)), mean, fill = NA))
# r7, r8, r9 are zoo objects
r7 <- rollapply(z, list(-seq(3)), mean) # z from above
r8 <- stats::lag(rollapplyr(z, 3, mean), -1)
r9 <- stats::lag(rollmeanr(z, 3), -1)
all.equal(r7, r8, r9)
## [1] TRUE
person
G. Grothendieck
schedule
01.05.2018