使用 rollaply 计算不同开始日期的滚动 mean/standard 偏差
Compute rolling mean/standard deviation with different start date with 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
,反转序列并将其转换为动物园。使用 Map
将其应用于给出动物园系列列表的数据。 cbind
on zoo series 将在每个末尾插入 NA
s 所以我们剩下的就是将它们反转并将它们转换为 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(...)
使问题中的代码可重现。
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
,反转序列并将其转换为动物园。使用 Map
将其应用于给出动物园系列列表的数据。 cbind
on zoo series 将在每个末尾插入 NA
s 所以我们剩下的就是将它们反转并将它们转换为 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(...)
使问题中的代码可重现。