r-用rollaply计算不同起始日期的滚动平均值/标准偏差



zoo包中的rollaply函数是否存在start参数?我想计算数据帧的列的标准偏差,但每列的开始日期不同。

如何计算大型数据帧的按列标准偏差:

library(zoo)
dat <- data.frame(cbind(runif(120),runif(120)))
StDev <-rollapply(dat,12,sd,by=12,na.rm=T,by.column=TRUE, align='right',fill=c(NULL,NULL,NULL))

我想让rollaply从数据帧的不同行开始,但像这样硬编码需要很长时间:

SD1 <-rollapply(dat$X1[1:120],12,sd,by=12,na.rm=T, align='right',fill=c(NULL,NULL,NULL)) #start at the first row
SD2 <-rollapply(dat$X1[12:120],12,sd,by=12,na.rm=T, align='right',fill=c(NULL,NULL,NULL)) #start at the 12th row
StDev <-cbind(SD1,c(NA,SD2))
> StDev_desired 
       SD1          SD2
  [1,] 0.2717607        NA
  [2,] 0.2848454 0.2869931
  [3,] 0.3024353 0.3036127
  [4,] 0.1919298 0.1954726
  [5,] 0.3427318 0.3097042
  [6,] 0.3513110 0.3468135
  [7,] 0.3205552 0.3485802
  [8,] 0.2594149 0.2575002
  [9,] 0.3159097 0.3095329
  [10,] 0.2967858 0.2786670

我希望能够将一个具有起始行的向量传递给滚动函数。。我可能会先对齐我的数据集(在列中向上移动观察结果,我希望滚动函数比其他列晚启动),但我想知道是否有更整洁的替代方案。

在stata中,-rolling-函数充当start参数。

创建一个函数,该函数获取data.frame的一列和起始位置向量的一个元素,对子集数据执行rollapply,反转序列并将其转换为zoo。使用Map将其应用于给出动物园系列列表的数据。zoo系列上的cbind将在每个的末尾插入NA,所以我们只剩下将它们反转并转换为数据。帧:

roll <- function(x, st) {
  zoo(rev(rollapplyr(x[st:length(x)], 12, sd, na.rm = TRUE, by = 12, fill = NULL)))
}
st <- c(1, 12)
m <- do.call(cbind, Map(roll, dat, st))
data.frame(lapply(as.list(m), rev), check.names = FALSE)

下次请使用set.seed(...)使问题中的代码可复制。

最新更新