5

我正在尝试计算移动窗口的一些统计数据,并在 zoo 包中使用 rollapply。我的问题是如何让 rollapply 将该函数应用于之前的 n 个观察而不是当前的观察和之前的 n-1 个观察,因为 align right 似乎是这样做的。

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 回答的“如果宽度是一个普通的数字向量,它的元素被认为是宽度与对齐一起解释,而如果宽度是一个列表,它的组件被认为是偏移量。在上述情况下,如果宽度的长度为 1 则宽度为每个点循环使用. 如果宽度是一个列表,它的组件表示整数偏移量,因此列表的第 i 个组件指的是位置 i + width[[i]] 的时间点。” 但我不知道这对 R 代码意味着什么,没有提供示例。

4

2 回答 2

6

没关系,我破译了“帮助”。width像这样添加参数rollapply

     width=list(-1:-5) 

完成它。

于 2015-08-26T19:23:27.513 回答
1

如果我没看错,您只需要将列“移动”一 - 这样第 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)
于 2015-08-26T19:15:09.790 回答