使用聚合的加权平均值
Weighted mean using aggregated
很抱歉问了一个非常基本的问题,但我陷入了一个难题,似乎无法摆脱它。
我的代码看起来像
Medicine Biology Business sex weights
0 1 0 1 0.5
0 0 1 0 1
1 0 0 1 05
0 1 0 0 0.33
0 0 1 0 0.33
1 0 0 1 1
0 1 0 0 0.33
0 0 1 1 1
1 0 0 1 1
其中前三个是研究领域,第四个变量是关于性别的。显然还有更多的观察。
我想要得到的是研究领域(医学、生物学、商业)的平均水平,按性别分类(因此男性的平均值和女性的平均值)。为此,我使用了以下代码:
barplot_sex<-aggregate(x=df_dummies[,1:19] , by=list(df$sex),
FUN= function(x) mean(x)
效果很好,满足了我的需求。我的问题是我现在需要使用加权平均值,但我不能使用
FUN= function(x) weighted.mean(x, weights)
因为观察比研究领域多得多。
我设法做的唯一选择是编辑(箱线图)并手动更改值,但 R 不会保存更改。另外,我确信一定有一种简单的方法可以完全满足我的需要。
如有任何帮助,我们将不胜感激。
最佳,
加布里埃尔
使用 by
.
by(dat, dat$sex, function(x) sapply(x[, 1:3], weighted.mean, x[, "weights"]))
# dat$sex: 0
# Medicine Biology Business
# 0.0000000 0.3316583 0.6683417
# ---------------------------------------------------------------------------------------
# dat$sex: 1
# Medicine Biology Business
# 0.82352941 0.05882353 0.11764706
数据:
dat <- structure(list(Medicine = c(0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L
), Biology = c(1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L), Business = c(0L,
1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L), sex = c(1L, 0L, 1L, 0L, 0L,
1L, 0L, 1L, 1L), weights = c(0.5, 1, 5, 0.33, 0.33, 1, 0.33,
1, 1)), class = "data.frame", row.names = c(NA, -9L))
很抱歉问了一个非常基本的问题,但我陷入了一个难题,似乎无法摆脱它。
我的代码看起来像
Medicine Biology Business sex weights
0 1 0 1 0.5
0 0 1 0 1
1 0 0 1 05
0 1 0 0 0.33
0 0 1 0 0.33
1 0 0 1 1
0 1 0 0 0.33
0 0 1 1 1
1 0 0 1 1
其中前三个是研究领域,第四个变量是关于性别的。显然还有更多的观察。 我想要得到的是研究领域(医学、生物学、商业)的平均水平,按性别分类(因此男性的平均值和女性的平均值)。为此,我使用了以下代码:
barplot_sex<-aggregate(x=df_dummies[,1:19] , by=list(df$sex),
FUN= function(x) mean(x)
效果很好,满足了我的需求。我的问题是我现在需要使用加权平均值,但我不能使用
FUN= function(x) weighted.mean(x, weights)
因为观察比研究领域多得多。
我设法做的唯一选择是编辑(箱线图)并手动更改值,但 R 不会保存更改。另外,我确信一定有一种简单的方法可以完全满足我的需要。
如有任何帮助,我们将不胜感激。
最佳, 加布里埃尔
使用 by
.
by(dat, dat$sex, function(x) sapply(x[, 1:3], weighted.mean, x[, "weights"]))
# dat$sex: 0
# Medicine Biology Business
# 0.0000000 0.3316583 0.6683417
# ---------------------------------------------------------------------------------------
# dat$sex: 1
# Medicine Biology Business
# 0.82352941 0.05882353 0.11764706
数据:
dat <- structure(list(Medicine = c(0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L
), Biology = c(1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L), Business = c(0L,
1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L), sex = c(1L, 0L, 1L, 0L, 0L,
1L, 0L, 1L, 1L), weights = c(0.5, 1, 5, 0.33, 0.33, 1, 0.33,
1, 1)), class = "data.frame", row.names = c(NA, -9L))