在多列上使用apply.rolling函数

时间:2014-07-27 18:35:18

标签: r zoo performanceanalytics rollapply

zoo包中,在使用rollapply函数时,我们会得到一个逻辑选项“by.column = TRUE/FALSE”。如果TRUEFUN将分别应用于每个列。

但是,在apply.rolling包的PerformanceAnalytics函数中,我没有看到任何此类选项。尝试以下内容时:

require(PerformanceAnalytics)

data(managers)

apply.rolling(managers[,1:10,drop=FALSE], FUN="mean", width=36)

它只给我计算第一列。有人可以告诉我如何在数据集中的所有列上运行此计算。

4 个答案:

答案 0 :(得分:1)

您可以在apply对象上apply.rolling xts功能:

apply(managers, 2, function(x){apply.rolling(x, FUN="mean", width=36)})

答案 1 :(得分:1)

使用rollapply()有什么问题吗? apply.rolling()只是它的一个包装。

rollapply(managers, FUN = mean, width = 36, by.column = TRUE)

答案 2 :(得分:0)

apply.rolling的帮助页面中,它说:

Details

Wrapper function for rollapply to hide some of the complexity of managing **single-column zoo objects**.

我认为这意味着不要在具有多列的对象上使用它。它是一个简化的包装器,允许您不必键入rollapply()的所有各种可选参数。

答案 3 :(得分:0)

您可以将lapply()rollapply()包中的zoo结合使用,以在多个列上执行滚动功能。在下面的代码中,我选择除第一个(select(-1))之外的所有列,并对剩余的列执行滚动功能。

dplyr()代码中:

m3v %>% 
  select(-1) %>% 
  lapply(function(x){rollapply(x, 
                           width=14, 
                           FUN=function(x){sum(x, na.rm=T)},
                           partial = T, fill = 0
                           )}) %>% 
  as.data.frame()