如何使用 summarise_each 计算加权平均值?
How do I compute weighted average using summarise_each?
如何使用 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
在此先感谢您的帮助!
帮助查看这里发生了什么。让我们做一个小功能
returns 它的参数长度
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
看看这个 table,你可以看到
在 qseq
之前,第一个和第二个参数是相同的,然后
后记 lenxy
的第二个参数的长度为 1,这就是结果
事实上 dplyr 确实对数据进行操作,替换每个
带有摘要的字段,而不是创建一个新的 data.fame.
解决方案很简单:从摘要中排除权重变量:
mtcars %>%
group_by(cyl) %>%
summarise_each(funs(weighted.mean(., gear)),
-gear)
如何使用 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
在此先感谢您的帮助!
帮助查看这里发生了什么。让我们做一个小功能 returns 它的参数长度
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
看看这个 table,你可以看到
在 qseq
之前,第一个和第二个参数是相同的,然后
后记 lenxy
的第二个参数的长度为 1,这就是结果
事实上 dplyr 确实对数据进行操作,替换每个
带有摘要的字段,而不是创建一个新的 data.fame.
解决方案很简单:从摘要中排除权重变量:
mtcars %>%
group_by(cyl) %>%
summarise_each(funs(weighted.mean(., gear)),
-gear)