如何使用先前使用 R 生成的均值来查找滚动均值?

How to find rolling mean using means previously generated using R?

希望社区能帮助我,因为我是 R 和 Whosebug 社区的新手。

我正在尝试用前 3 年的平均值替换一个组的缺失值,然后使用这个新生成的平均值继续使用 dplyr 或 data.table 在 R 中生成下一个周期的缺失值.我的数据看起来像这样(所需的输出列四舍五入为 2 位数):

df <- data.frame(gvkey = c(10443, 10443, 10443, 10443, 10443, 10443, 10443, 29206, 29206, 29206, 29206, 29206), fyear = c(2005, 2006, 2007, 2008, 2009, 2010, 2011, 2017, 2018, 2019, 2020, 2021), receivables = c(543, 595, 757, NA, NA, NA, NA, 147.469, 161.422, 154.019, NA, NA), desired_output = c(543, 595, 757, 631.67, 661.22, 683.30, 658.73, 147.47, 161.42, 154.02, 154.30, 156.58))

我尝试了以下代码行,但它没有使用新生成的数字:

df <- df %>% mutate(mean_rect=rollapply(rect,3,mean,align='right',fill=NA))

如有任何帮助,我们将不胜感激!

因为您想要的填充值取决于任何以前创建的填充值,我认为唯一合理的方法是可靠的 for 循环:

df$out <- NA

for (i in 1:nrow(df)) {
  if (!is.na(df$receivables[i])) {
    df$out[i] <- df$receivables[i]
  } else {
    df$out[i] <- mean(df$out[(i-3):(i-1)], na.rm = T)
  }
}

   gvkey fyear receivables desired_output      out
1  10443  2005     543.000         543.00 543.0000
2  10443  2006     595.000         595.00 595.0000
3  10443  2007     757.000         757.00 757.0000
4  10443  2008          NA         631.67 631.6667
5  10443  2009          NA         661.22 661.2222
6  10443  2010          NA         683.30 683.2963
7  10443  2011          NA         658.73 658.7284
8  29206  2017     147.469         147.47 147.4690
9  29206  2018     161.422         161.42 161.4220
10 29206  2019     154.019         154.02 154.0190
11 29206  2020          NA         154.30 154.3033
12 29206  2021          NA         156.58 156.5814