如何计算每列中的多个加权平均值?

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

strong text我正在尝试找到一种方法来计算每个国家/地区多年的加权平均值。我的数据当前格式如下:

df <- data.frame(
  YEAR_CALENDAR=c(2020, 2020, 2020, 2020, 2020, 2021, 2021, 2021, 2021, 2021),
  age_group=c("15-29", "30-44", "45-59", "60-74", "Over 75", "15-29", "30-44", "45-59", "60-74", "Over 75"),
  a=c(3.85, 3.66, 3.76, 2.70, 3.10, 4.32, 4.64, 3.67, 3.45, 4.56),
  b=c(3.56, 3.67, 3.72, 3.89, 4.23, 4.28, 4.27, 3.12, 3.46, 3.97),
  weights=rep(c(0.3333784699, 0.2890995261, 0.2161137441,
                  0.1203791469, 0.04150304671), 2))

我想要一个数据框,其中包含每年 a 国和 b 国的加权平均值,使用权重列中的系数。生成的数据框将包含年份、国家 a、国家 b 的列,其值是该国当年的加权平均值。

我的方法是将权重列乘以 a 列和 b 列。然后,我会尝试将 5 行的值加在一起(每年)以找到加权平均值。在乘以权重的第一步中,我收到“二元运算符的非数字参数”错误。代码如下:

new_df <- df %>%
  mutate(across(3:4, .*df$weights))

我需要修复我的方法,或者需要有人帮助我通过不同的方法获得结果。

编辑: 好的,乘法部分有效!感谢您的帮助。我想知道是否有一种方法可以根据国家和年份在每个年龄组中添加值,这样我每年每个国家都有一个值。

非常感谢!

r dataframe weighted-average
1个回答
0
投票

您可以通过使用

weighted.mean
 中的基本 R 
summarize

函数来简化事情
df %>%
  group_by(YEAR_CALENDAR) %>%
  summarise(across(a:b, ~ weighted.mean(.x, weights)))
#> # A tibble: 2 x 3
#>   YEAR_CALENDAR     a     b
#>           <dbl> <dbl> <dbl>
#> 1          2020  3.61  3.69
#> 2          2021  4.18  3.92
© www.soinside.com 2019 - 2024. All rights reserved.