【问题标题】:How do I compare a particular group mean to each separate group?如何将特定组的平均值与每个单独的组进行比较?
【发布时间】:2018-10-24 11:02:57
【问题描述】:

我有一个大型数据集,并且我试图将数据分组的不同列。我正在尝试使用 dplyr 和 mutate 创建一个新列,这是每个单独组的平均值。然后,我想看看这些平均值与仅一个类别的平均值之间的区别。

这个问题可能与 mtcars 数据集有关。我将如何按“cyl”和“gear”对 mtcars 数据进行分组,然后为每个组取“mpg”的平均值。然后,我想查看每个组的“mpg”平均值与“gear”==5 但具有变量“cyl”的所有汽车相比的差异。

如果我问的问题与其他人相同,我深表歉意,但我无法找到这个特定的问题。

df <- mtcars
df2 <- df %>% group_by(cyl, gear) %>% mutate(mean_mpg = mean(mpg))

【问题讨论】:

  • df2 &lt;- df %&gt;% group_by(cyl, gear) %&gt;% summarise(mean_mpg = mean(mpg)) 应该让你开始
  • “但有变量“cyl””是什么意思?
  • 我想看看每辆 4 缸车辆相对于 5 齿轮和 4 缸汽车的平均值的差异,6 缸相对于 5 齿轮和 6 缸的平均值的差异等。跨度>
  • @BrentB 您的评论似乎与您的问题相矛盾。您的问题是“按“cyl”和“gear”对 mtcars 数据进行分组,然后为每个组取“mpg”的平均值”,这意味着您可以使用 4 cyl 和3 档、4 缸和 4 档、4 缸和 5 档等(Jack Brookes 的回答涵盖了这种情况)。但是您上面的评论似乎说您想要 4、6、8 和 cyl(忽略齿轮)的均值,并将这些均值与齿轮为 5 的 4、6 和 8 cyl 的均值进行比较。我用我对您评论的解释来回答。 请编辑您的问题以明确您的目标。

标签: r group-by dplyr


【解决方案1】:

这是相当蛮力的,但它应该给你你想要的。我得到了cylgear 的平均值mpg 然后只是cyl 忽略齿轮,然后是gear 的平均值mpg 忽略cyl

mtcars %>%  
  group_by(cyl,gear) %>% 
  mutate(mean_mpg_both = mean(mpg)) %>% 
  ungroup %>% 
  group_by(gear) %>% 
  mutate(mean_gear_mpg = mean(mpg)) %>% 
  ungroup %>% 
  group_by(cyl) %>% 
  mutate(mean_cyl_mpg = mean(mpg)) %>% 
  select(mpg,cyl,gear,mean_mpg_both,mean_gear_mpg, mean_cyl_mpg) %>% 
  group_by(cyl,gear) %>% 
  filter(row_number()==1)

【讨论】:

    【解决方案2】:
    df2 <- df %>%
      group_by(cyl, gear) %>%
      summarise(mean_mpg = mean(mpg)) %>%
      mutate(comparison_mpg = mean_mpg[which(gear == 5)],
             mpg_diff = mean_mpg - comparison_mpg)
    

    结果

    # A tibble: 8 x 5
    # Groups:   cyl [3]
        cyl  gear mean_mpg comparison_mpg mpg_diff
      <dbl> <dbl>    <dbl>          <dbl>    <dbl>
    1    4.    3.     21.5           28.2  -6.70  
    2    4.    4.     26.9           28.2  -1.27  
    3    4.    5.     28.2           28.2   0.    
    4    6.    3.     19.8           19.7   0.0500
    5    6.    4.     19.8           19.7   0.0500
    6    6.    5.     19.7           19.7   0.    
    7    8.    3.     15.0           15.4  -0.350 
    8    8.    5.     15.4           15.4   0.    
    

    【讨论】:

    • 谢谢!这与我希望做的很接近,并且我能够做出可行的答案。
    【解决方案3】:

    根据您的评论,我认为这就是您所追求的:

    mtcars %>% group_by(cyl) %>%
        summarize(mean_by_cyl = mean(mpg),
                  mean_gear5_by_cyl = mean(mpg[gear == 5]),
                  mean_diff_from_gear5 = mean_by_cyl - mean_gear5_by_cyl)
    # # A tibble: 3 x 4
    #     cyl mean_by_cyl mean_gear5_by_cyl mean_diff_from_gear5
    #   <dbl>       <dbl>             <dbl>                <dbl>
    # 1     4    26.66364              28.2          -1.53636364
    # 2     6    19.74286              19.7           0.04285714
    # 3     8    15.10000              15.4          -0.30000000
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-13
      • 1970-01-01
      • 2015-05-01
      • 2015-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多