关于命令by
和weighted.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))
这没用。加权均值是通过某种方式计算的,并显示在“收入组”列中,但是对于整个集合而不是按组或仅对于一个组,我不知道。我阅读了有关
plyr
或aggregate
软件包的内容,但似乎并没有达到我感兴趣的目的。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/