如何解决summarise_all()中的错误“ x和w必须具有相同的长度”?

时间:2019-07-02 15:22:46

标签: r dplyr anonymous-function group-summaries

我想使用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来做到这一点,但是我对其他可用方法也可以。

1 个答案:

答案 0 :(得分:0)

我们不需要.$,因为.$提取整个列值,而不是提取与分组结构相对应的值

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

如果我们明确提供参数,也可以不使用lambda函数(~)来编写

df %>%
   group_by(A)%>%
   summarise_all(weighted.mean, w = B)