【问题标题】:Average over groups and include previous groups对各组进行平均并包括以前的组
【发布时间】:2019-05-11 18:11:25
【问题描述】:

我有一个数据框(df,下面创建了一个示例)。我想按 group1 和 group2 分组并取值的平均值。取平均值时,我想将以前的组包括在 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。但是因为它们也属于 group1 (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))

【问题讨论】:

    标签: r


    【解决方案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  
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-11
      • 2017-03-01
      • 1970-01-01
      • 2011-05-26
      • 2015-03-12
      • 2016-03-11
      • 2011-07-09
      • 1970-01-01
      相关资源
      最近更新 更多