分组平均,包括先前的分组

时间:2018-12-10 19:41:59

标签: r

我有一个数据框(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))

1 个答案:

答案 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  

您想要的是累积分组平均值。现在似乎一步不可能,所以首先我计算分组总和和分组长度,然后计算累积分组均值。