如何使用先前使用 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
希望社区能帮助我,因为我是 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