首页 > 解决方案 > 为什么 R 中的 rollapply 函数在应用于向量时会返回一个矩阵?

问题描述

我有每天的财务数据。类似于以下内容:

head(df)

tibble [2,871 x 2] (S3: tbl_df/tbl/data.frame)
Price | Volatility
15.4    17.5
14.7    17.8
14.4    17.7
14.9    17.8
...     ...

我写了一个函数来计算 z 分数:

zscore <- function(x) {
  z <- (x-mean(x))/sd(x)
  return(z)
}

我想添加两个额外的列,1) 计算每一行的 z 分数,另一个计算 255 个工作日内的滚动 z 分数(即大约 1 个日历年)

我编写了以下代码,它返回错误消息:

df %>%
  mutate(full_zscore = zscore(Volatility),
         roll_zscore = rollapply(Volatility, 255, FUN = zscore, align = "right"))

Error: Invalid index: out of bounds

经过进一步调查,我注意到 rollapply 函数返回 a matrix,因此我收到错误消息。

谁能帮我理解为什么rollapply(df$Volatility, 255, FUN = zscore, alighn = "right")在新变量列上返回矩阵而不是滚动 z 分数?

谢谢!

标签: rfunctionfinancerollapply

解决方案


推荐阅读