如何使用dplyr中的summarise_each计算数据集中所有字段的加权平均值?例如,假设我们要按 cyl mtcars 数据集进行分组,并计算权重作为齿轮列的所有列的加权平均值。我尝试了以下方法,但无法使其正常工作。

mtcars %>% group_by(cyl) %>% summarise_each(funs(weighted.mean(., gear)))

# The line above gives the following output
# Error in weighted.mean.default(c(1, 2, 2, 1, 2, 1, 1, 1, 2, 2, 2), 4.15555555555556) :
# 'x' and 'w' must have the same length

在此先感谢您的帮助!

最佳答案

为了帮助了解这里发生了什么。让我们做一点功能
返回其参数的长度

lenxy <- function(x,y)
    paste0(length(x),'-',length(y))

然后将其应用在summarise_each中,如下所示:
mtcars %>% group_by(cyl) %>% summarise_each(funs(lenxy(., qsec)))

#>   cyl   mpg  disp    hp  drat    wt  qsec   vs   am gear carb
#> 1   4 11-11 11-11 11-11 11-11 11-11 11-11 11-1 11-1 11-1 11-1
#> 2   6   7-7   7-7   7-7   7-7   7-7   7-7  7-1  7-1  7-1  7-1
#> 3   8 14-14 14-14 14-14 14-14 14-14 14-14 14-1 14-1 14-1 14-1

查看此表,您可以看到
qseq之前,第一个和第二个参数是相同的,然后
后记lenxy的第二个参数的长度为1,即结果
dplyr确实会对现有数据进行操作,因此替换了每个数据
字段的摘要,而不是创建新的data.fame。

解决方案很简单:从摘要中排除加权变量:
mtcars %>%
    group_by(cyl) %>%
    summarise_each(funs(weighted.mean(., gear)),
                   -gear)

关于r - 如何使用summarise_each计算加权平均值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28290062/

10-12 17:43