如何在R中对多列执行移动缩放函数?

问题描述 投票:0回答:1

我正在尝试使用

zoo::rollapply
计算 8 个观测值的移动窗口上的 z 分数。下面的示例代码是我试图实现的,但最终结果并不正确。

唯一需要注意的是我的真实数据有一些我希望忽略的 NA 值。我还希望窗口增大,直到达到 8 个观测值。

library(zoo)

df <- as.data.frame(
  matrix(round(runif(n = 120, min = 1, max = 20), 0), nrow = 20)
  )

z_score <- function(x){
  as.numeric(round(scale(x), 2))
}

df_scaled <- df %>%
  mutate_at(
    vars(1:6),
    ~rollapply(.x, width = 8, FUN = z_score, by.column = TRUE, partial = TRUE,
                          align = "right"
               )
    )
r zoo
1个回答
0
投票

z_score
应该返回一个标量。注意使用
last

library(dplyr)
library(zoo)
set.seed(123) # for reproducibility

df <- as.data.frame(
  matrix(round(runif(n = 120, min = 1, max = 20), 0), nrow = 20)
)

z_score <- function(x) c(last(round(scale(x), 2)))

df %>%
  mutate(across(everything(), ~ rollapplyr(.x, 8, z_score, partial = TRUE)))
© www.soinside.com 2019 - 2024. All rights reserved.