gpt4 book ai didi

r - 如何使用 summarise_each 计算加权平均值?

转载 作者:行者123 更新时间:2023-12-04 16:39:22 35 4
gpt4 key购买 nike

如何使用 dplyr 中的 summarise_each 计算数据集中所有字段的加权平均值?例如,假设我们要将 分组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/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com