我有一个数据框(df,下面创建了一个示例)。我想按组1和组2分组并取平均值。取平均值时,我想将以前的组包括在group1中。
df = data.frame(group1 = c('a','a','a','a','a','b','b','b','c','c','c'),
group2 = c(1,1,2,2,3,1,1,2,1,2,2),
values = c(2,3,4,3, 9,3,2,5,6,3,0))
一个例子可以最好地说明:第一行和第二行属于同一组,平均为2.5。第三和第四组属于同一组,平均为3.5。但是因为它们也属于第1组(a),所以我希望期望的结果是3,如下所示。
group1 group2 meanvalues
a 1 2.5
a 2 3
a 3 4.2
b 1 2.5
b 2 3.33
c 1 6
c 2 3
下面是我的代码,但它们仅取各组的平均值
df2 <- df %>% group_by(group1, group2) %>%
summarize(meanvalues = mean(values))
答案 0 :(得分:1)
我们可以执行以下操作:
df %>% group_by(group1, group2) %>% summarise(values = sum(values), n = n()) %>%
mutate(meanvalues = cumsum(values) / cumsum(n)) %>% select(-values, -n)
# A tibble: 7 x 3
# Groups: group1 [3]
# group1 group2 meanvalues
# <fct> <dbl> <dbl>
# 1 a 1 2.5
# 2 a 2 3
# 3 a 3 4.2
# 4 b 1 2.5
# 5 b 2 3.33
# 6 c 1 6
# 7 c 2 3
您想要的是累积分组平均值。现在似乎一步不可能,所以首先我计算分组总和和分组长度,然后计算累积分组均值。