如何将特定组平均值与每个单独组进行比较?

时间:2018-05-14 17:46:53

标签: r group-by dplyr

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

此问题可能与mtcars数据集有关。我如何按“cyl”和&组分对mtcars数据进行分组? “齿轮”然后取每组的“mpg”的平均值。然后,我希望看到每组“mpg”的平均值与特别是所有“gear”= = 5的车辆的差异,但是具有变量“cyl”。

如果我问其他人有同样的问题,我道歉,但我找不到这个具体的问题。

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

3 个答案:

答案 0 :(得分:1)

这是相当蛮力但它应该给你你想要的东西。我得到了mpgcyl的平均gear,只有cyl忽略了齿轮,然后mpg的{​​{1}}忽略了gear cyl 1}}。

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)

答案 1 :(得分:0)

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.    

答案 2 :(得分:0)

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

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