在 r 中使用跨组聚合的加权平均值
Weighted mean using aggregate across groups in r
我想使用 r 中的聚合函数对一组进行加权平均。
这是我的数据:
set.seed(1980)
Group_1 <- sample(letters[1:4], 50, TRUE)
Group_2 <- sample(letters[8:13], 50, TRUE)
Weight <- sample(seq(1,50), 50, TRUE)
Value <- sample(seq(1,50), 50, TRUE)
DF <- data.frame(Group_1, Group_2, Weight, Value)
head(DF)
我想使用 Weight
列对每个成对组取 Value
列的加权平均值。
这样,聚合函数将如下所示:
aggregate(Value ~ Group_1 + Group_2, data = df, mean)
如何使用聚合函数计算加权平均值?
而不是 mean
,使用 weighted.mean
。但是,aggregate
在这里可能不是一个选项,因为 aggregate
仅遍历 'Value' 列并且它无法访问每个组的 'Weight' [=19] =]
library(dplyr)
DF %>%
group_by(Group_1, Group_2) %>%
summarise(wt_mean = weighted.mean(Value, Weight), .groups = 'drop')
-输出
# A tibble: 21 x 3
# Groups: Group_1 [4]
# Group_1 Group_2 wt_mean
# <chr> <chr> <dbl>
# 1 a h 24.7
# 2 a i 15
# 3 a j 21.1
# 4 a k 23.6
# 5 a m 14.1
# 6 b i 40
# 7 b j 12.7
# 8 b k 6.88
# 9 b l 30.6
10 b m 5
# … with 11 more rows
如果我们想使用 base R
,那么 by
应该可以
by(DF, DF[c('Group_1', 'Group_2')], function(x) weighted.mean(x$Value, x$Weight))
我想使用 r 中的聚合函数对一组进行加权平均。
这是我的数据:
set.seed(1980)
Group_1 <- sample(letters[1:4], 50, TRUE)
Group_2 <- sample(letters[8:13], 50, TRUE)
Weight <- sample(seq(1,50), 50, TRUE)
Value <- sample(seq(1,50), 50, TRUE)
DF <- data.frame(Group_1, Group_2, Weight, Value)
head(DF)
我想使用 Weight
列对每个成对组取 Value
列的加权平均值。
这样,聚合函数将如下所示:
aggregate(Value ~ Group_1 + Group_2, data = df, mean)
如何使用聚合函数计算加权平均值?
而不是 mean
,使用 weighted.mean
。但是,aggregate
在这里可能不是一个选项,因为 aggregate
仅遍历 'Value' 列并且它无法访问每个组的 'Weight' [=19] =]
library(dplyr)
DF %>%
group_by(Group_1, Group_2) %>%
summarise(wt_mean = weighted.mean(Value, Weight), .groups = 'drop')
-输出
# A tibble: 21 x 3
# Groups: Group_1 [4]
# Group_1 Group_2 wt_mean
# <chr> <chr> <dbl>
# 1 a h 24.7
# 2 a i 15
# 3 a j 21.1
# 4 a k 23.6
# 5 a m 14.1
# 6 b i 40
# 7 b j 12.7
# 8 b k 6.88
# 9 b l 30.6
10 b m 5
# … with 11 more rows
如果我们想使用 base R
,那么 by
应该可以
by(DF, DF[c('Group_1', 'Group_2')], function(x) weighted.mean(x$Value, x$Weight))