Может быть проще думать о смещениях. Если вы хотите окно 3, тогда
align = "right"
соответствует использованию окна на основе смещений -2, -1, 0, то есть точки перед предыдущей, предыдущей и текущей точкой. Текущая точка - самый правый конец окна. Обратите внимание, что rollapplyr
с r
на конце - это то же самое, что и указание align = "right"
align = "center"
соответствует использованию окна на основе смещений -1, 0, 1, то есть текущей точки предыдущей точки и следующей точки. Текущей точкой является центр окна.
align = "left"
соответствует использованию окна на основе смещений 0, 1, 2, то есть текущей точки, следующей точки и точки после этого. Текущая точка является самой левой точкой окна.
rollapply
позволяет использовать спецификацию align=
или обозначение смещения. Чтобы использовать последнее для width
, укажите список, содержащий один вектор, определяющий смещения.
конец окна в текущей точке
Ниже мы используем align=
, чтобы взять среднее значение окна 3, оканчивающегося в текущей точке, а также использовать смещения в качестве альтернативы. Мы показываем как фреймы данных, так и объекты зоопарка.
Мы опустили fill=NA
для объектов зоопарка, поскольку они автоматически выровняются в любом случае, поэтому обычно его не нужно использовать.
library(zoo)
transform(dat, roll = rollapplyr(x, 3, mean, fill = NA))
transform(dat, roll = rollapply(x, list(seq(-2, 0)), mean, fill = NA))
z <- read.zoo(dat, FUN = identity)
rollapplyr(z, 3, mean)
rollmeanr(z, 3)
rollapply(z, list(seq(-2, 0)), mean) # z from above
конец окна в предыдущей точке
Если вы хотите 3 предыдущих точки, то есть смещения -3, -2, -1, то есть не текущую точку, а 3 предшествующие точки, тогда будет работать следующее. Обратите внимание, что lag
в последней строке требует временных рядов и не должен использоваться с простыми векторами.
transform(dat, roll = rollapply(x, list(-seq(3)), mean, fill = NA))
rollapply(z, list(-seq(3)), mean) # z from above
lag(rollapplyr(z, 3, mean), -1)
lag(rollmeanr(z, 3), -1)