rollapply 中的对齐和偏移
alignment and offsets in rollapply
我正在尝试为移动 window 计算一些统计数据,并在 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 回答的 "If width is a plain numeric vector its elements are regarded as widths to be interpreted in conjunction with align whereas if width is a list its components are regarded as offsets. In the above cases if the length of width is 1 then width is recycled for every by-th point. If width is a list its components represent integer offsets such that the i-th component of the list refers to time points at positions i + width[[i]]." 但我不知道这在 R 代码方面意味着什么,没有提供示例。
如果我没看错,您只需要将 "shifted" 列向下移一 - 这样第 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)
没关系,我破译了 'help.' 添加参数 width
到 rollapply
像这样:
width=list(-1:-5)
完成它。
我正在尝试为移动 window 计算一些统计数据,并在 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 回答的 "If width is a plain numeric vector its elements are regarded as widths to be interpreted in conjunction with align whereas if width is a list its components are regarded as offsets. In the above cases if the length of width is 1 then width is recycled for every by-th point. If width is a list its components represent integer offsets such that the i-th component of the list refers to time points at positions i + width[[i]]." 但我不知道这在 R 代码方面意味着什么,没有提供示例。
如果我没看错,您只需要将 "shifted" 列向下移一 - 这样第 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)
没关系,我破译了 'help.' 添加参数 width
到 rollapply
像这样:
width=list(-1:-5)
完成它。