rollaply
包中的zoo
函数是否有 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
参数。
答案 0 :(得分:1)
创建一个函数,它接受data.frame的列和起始位置向量的一个元素,对子集化数据执行rollapply
,反转系列并将其转换为zoo。使用Map
将其应用于给出动物园系列列表的数据。动物园系列中的cbind
会在每个结尾处插入NA
,所以我们剩下的就是将它们反转并将它们转换为data.frame:
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(...)
使问题中的代码重现。