【问题标题】:Using apply.rolling function over multiple columns在多列上使用 apply.rolling 函数
【发布时间】:2014-09-18 23:49:50
【问题描述】:

zoo 包中,当使用rollapply 函数时,我们得到一个逻辑选项'by.column = TRUE/FALSE'。如果TRUE,则FUN分别应用于每一列。

但是,在PerformanceAnalytics 包的apply.rolling 函数中,我没有看到任何这样的选项。在尝试以下操作时:

require(PerformanceAnalytics)

data(managers)

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

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

【问题讨论】:

  • 对不起,大卫,我是 R 新手,不像你那样缺乏编程技能。因此,有时像我这样幼稚的人会发现很难理解技术编程语言。非常感谢您的有益回复。
  • 抱歉我的讽刺性回应 :) 这里真的没有关于编程的内容,只是在使用函数之前开始阅读文档。谷歌“性能分析 pckg r pdf”

标签: r zoo performanceanalytics rollapply


【解决方案1】:

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

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

【讨论】:

  • 您的解决方案没有问题。出于某种原因,@Jairaj Gupta 询问 apply.rolling...
【解决方案2】:

你可以在xts对象上apply函数apply.rolling

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

【讨论】:

    【解决方案3】:

    apply.rolling 的帮助页面中显示:

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

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

    【讨论】:

      【解决方案4】:

      您可以将lapply()zoo 包中的rollapply() 结合起来,在多个列上执行滚动功能。在下面的代码中,我选择除第一列 (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()
      

      【讨论】:

        猜你喜欢
        • 2021-05-19
        • 2016-10-29
        • 2017-08-02
        • 1970-01-01
        • 2022-11-10
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 2017-09-18
        相关资源
        最近更新 更多