2

我想使用 dplyr::summarise_all() 和 weighted.mean 来计算每个组的许多列的加权平均值。

我尝试直接使用匿名函数,但它返回一个错误:'x'和'w'必须具有相同的长度。我知道我可以使用 summarise() 和 weighted.mean,但是这样我需要指定所有列名,这不是我想要的。

result = df%>%
  group_by(A)%>%
  summarise_all(function(x){weighted.mean(x, .$B)})

这里数据框有组列A、权重列B和其他列。我希望 A 中的每个组的 B 列的其他列值的加权平均值。我希望我可以使用 dplyr 和 weighted.mean 来做到这一点,但我对其他可用方法没问题。

4

1 回答 1

0

我们不需要提取整个列.$.$值而不是对应于分组结构的值

df %>%
   group_by(A)%>%
   summarise_all(list(~ weighted.mean(., B)))

~如果我们显式提供参数,它也可以不使用 lambda 函数 ( )

df %>%
   group_by(A)%>%
   summarise_all(weighted.mean, w = B)
于 2019-07-02T15:24:46.567 回答