我正在尝试计算移动窗口的一些统计信息,并在动物园包中使用rollapply。我的问题是如何让rollapply将该函数应用于前面的n个观察值而不是当前观察值和前面的n-1个观察值,因为右对齐似乎可以。
require(zoo)
z <- data.frame(x1=11:111, x2=111:211, x3=as.Date(31:131))#generate data
output<-data.frame(dates=z$x3,
rollapply(z[,1:2],by.column=TRUE, 5, max, fill=NA, align='right'))
我有一个预感,这是由回答?rollapply“如果width是一个普通的数字向量,它的元素被认为是与align一起解释的宽度,而如果width是一个列表,它的组件被视为偏移。在上面如果宽度的长度为1,则宽度为每个第s点再循环。如果width是列表,则其组件表示整数偏移,使得列表的第i个分量指向位置i + width [[]的时间点。一世]]。”但是我不知道R代码意味着什么,没有提供任何例子。
答案 0 :(得分:5)
没关系,我破译了'帮助'。将参数width
添加到rollapply
,如下所示:
width=list(-1:-5)
完成它。
答案 1 :(得分:1)
如果我正确阅读,你只需要列#34;移动&#34;减一 - 这样第n行的值就是行n + 1现在的值。
使用lag
函数
z <- data.frame(x1=11:111, x2=111:211, x3=as.Date(31:131))#generate data
output<-data.frame(dates=z$x3,
rollapply(z[,1:2],by.column=TRUE, 5, max, fill=NA, align='right'))
output$x1 <- lag(output$x1, 1)
output$x2 <- lag(output$x2, 1)