我想计算多列的加权移动平均值,每列使用相同的权重。加权移动平均值应按组计算(与使用具有多个参数的函数的 `dplyr::across`形成对比)。
在下面的示例中,分组应该使加权移动平均值每年“重置”,从而为每年的前两个观测值产生缺失值。
我该如何进行这项工作?
library(tidyverse)
weighted.filter <- function(x, wt, filter, ...) {
filter <- filter / sum(filter)
stats::filter(x * wt, filter, ...) / stats::filter(wt, filter, ...)
}
economics %>%
group_by(year = lubridate::year(date)) %>%
arrange(date) %>%
mutate(across(
c(pce, psavert, uempmed),
list("moving_average_weighted" = weighted.filter),
wt = pop, filter = rep(1, 3), sides = 1
))
#> Error: Problem with `mutate()` input `..1`.
#> x Input `..1` can't be recycled to size 12.
#> ℹ Input `..1` is `(function (.cols = everything(), .fns = NULL, ..., .names = NULL) ...`.
#> ℹ Input `..1` must be size 12 or 1, not 6.
#> ℹ The error occurred in group 2: year = 1968.
由reprex 包于 2021-03-31 创建(v1.0.0)