关于命令byweighted.mean的问题已经存在,但没有一个能够帮助解决我的问题。我是R语言的新手,比起编程,我更习惯于数据挖掘语言。

我有一个数据框,其中包含每个人(观察/行)的收入,教育水平和样本权重。我想按教育程度计算收入的加权平均值,并且希望将结果与原始数据框的新列中的每个人相关联,如下所示:

obs income education weight incomegroup
1.   1000      A       10    --> display weighted mean of income for education level A
2.   2000      B        1    --> display weighted mean of income for education level B
3.   1500      B        5    --> display weighted mean of income for education level B
4.   2000      A        2    --> display weighted mean of income for education level A

我试过了:
data$incomegroup=by(data$education, function(x) weighted.mean(data$income, data$weight))

这没用。加权均值是通过某种方式计算的,并显示在“收入组”列中,但是对于整个集合而不是按组或仅对于一个组,我不知道。我阅读了有关plyraggregate软件包的内容,但似乎并没有达到我感兴趣的目的。
ave{stats}命令提供的正是我要查找的内容,但仅出于简单的意思:
data$incomegroup=ave(data$income,data$education,FUN = mean)

不能与砝码一起使用。

预先感谢您的帮助!

最佳答案

如果我们使用mutate,那么我们可以避免left_join

library(dplyr)
df %>%
   group_by(education) %>%
   mutate(weighted_income = weighted.mean(income, weight))
#    obs income education weight weighted_income
#  <int>  <int>    <fctr>  <int>           <dbl>
#1     1   1000         A     10        1166.667
#2     2   2000         B      1        1583.333
#3     3   1500         B      5        1583.333
#4     4   2000         A      2        1166.667

关于r - 在data.frame中按组显示加权平均值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38509139/

10-12 19:54