Hello,
I'm having trouble calculating a moving average of values that should be weighted to account for different sample sizes. Any feedback is greatly appreciated. Here is an example below:
suppressWarnings(suppressPackageStartupMessages({
library(tidyverse)
library(slider)
}))
# data
df <- tibble(resp_date = seq(as.Date("2020-01-01"),
as.Date("2020-04-09"),
by = "day"),
n = round(runif(100, min = 100, max = 200), 0),
percent = round(runif(100, min = 75, max = 100), 2))
# I am able to get a simple moving average of percent with the slider package
df %>%
mutate(`7 day avg` = slide_index_dbl(.i = resp_date,
.x = percent,
.f = mean,
.before = 6))
#> # A tibble: 100 x 4
#> resp_date n percent `7 day avg`
#> <date> <dbl> <dbl> <dbl>
#> 1 2020-01-01 159 86.7 86.7
#> 2 2020-01-02 103 75.1 80.9
#> 3 2020-01-03 114 86.3 82.7
#> 4 2020-01-04 109 87.4 83.9
#> 5 2020-01-05 106 94.2 85.9
#> 6 2020-01-06 129 89.4 86.5
#> 7 2020-01-07 157 93.3 87.5
#> 8 2020-01-08 180 86.4 87.4
#> 9 2020-01-09 169 83.5 88.6
#> 10 2020-01-10 154 85.6 88.5
#> # ... with 90 more rows
#> # i Use `print(n = ...)` to see more rows
# the n is different for each day though, so I'd like to weight the moving
# average by n. I've tried weighted.mean(), but get the following error message.
df %>%
mutate(`7 day avg` = slide_index_dbl(.i = resp_date,
.x = percent,
.f = weighted.mean(percent, n),
.before = 6))
#> Error in `mutate()`:
#> ! Problem while computing `7 day avg = slide_index_dbl(...)`.
#> Caused by error in `slide_index_impl()`:
#> ! Can't convert `.f`, a number, to a function.
Created on 2022-08-03 by the reprex package (v2.0.1)