在zoo
包中,在使用rollapply
函数时,我们会得到一个逻辑选项“by.column = TRUE/FALSE
”。如果TRUE
,FUN
将分别应用于每个列。
但是,在apply.rolling
包的PerformanceAnalytics
函数中,我没有看到任何此类选项。尝试以下内容时:
require(PerformanceAnalytics)
data(managers)
apply.rolling(managers[,1:10,drop=FALSE], FUN="mean", width=36)
它只给我计算第一列。有人可以告诉我如何在数据集中的所有列上运行此计算。
答案 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()