【问题标题】:Summarise for multiple group_by variables combined and individually汇总多个 group_by 变量的组合和单独
【发布时间】:2017-01-20 12:20:22
【问题描述】:

我正在使用 dplyr 的 group_by 和 summarise 来获得每个 group_by 变量组合的平均值,但也想单独获得每个 group_by 变量的平均值。

例如,如果我运行

mtcars %>% 
  group_by(cyl, vs) %>% 
  summarise(new = mean(wt))

我明白了

    cyl    vs      new
  <dbl> <dbl>    <dbl>
     4     0 2.140000
     4     1 2.300300
     6     0 2.755000
     6     1 3.388750
     8     0 3.999214

但我想得到

    cyl    vs      new
  <dbl> <dbl>    <dbl>
     4     0 2.140000
     4     1 2.300300
     4    NA 2.285727
     6     0 2.755000
     6     1 3.388750
     6    NA 3.117143
     8     0 3.999214
    NA     0 3.688556
    NA     1 2.611286

即获得组合和单独变量的平均值

编辑 Jaap 将此标记为重复,并将我指向Using aggregate to apply several functions on several variables in one call 的方向。我在那里查看了引用 dplyr 的 jaap 的答案,但我看不出它是如何回答我的问题的?您说要使用summarise_each,但我仍然不明白如何使用它来分别通过变量获得每个组的平均值?对不起,如果我是愚蠢的......

【问题讨论】:

  • 我认为你应该试试这个你必须分解你的分组变量。 mtcars %>% mutate(cyl=as.factor(cyl),vs=as.factor(vs)) %>% group_by(cyl,vs) %>% summarise(new=mean(wt))
  • 一切正常。
  • 运行上面仍然只显示cylvs组合的方法,而不是单独显示

标签: r dplyr


【解决方案1】:

这是一个使用bind_rows的想法,

library(dplyr)

mtcars %>% 
     group_by(cyl, vs) %>% 
     summarise(new = mean(wt)) %>% 
    bind_rows(., 
              mtcars %>% group_by(cyl) %>% summarise(new = mean(wt)) %>% mutate(vs = NA), 
              mtcars %>% group_by(vs) %>% summarise(new = mean(wt)) %>% mutate(cyl = NA)) %>% 
   arrange(cyl) %>% 
   ungroup()

# A tibble: 10 × 3
#     cyl    vs      new
#   <dbl> <dbl>    <dbl>
#1      4     0 2.140000
#2      4     1 2.300300
#3      4    NA 2.285727
#4      6     0 2.755000
#5      6     1 3.388750
#6      6    NA 3.117143
#7      8     0 3.999214
#8      8    NA 3.999214
#9     NA     0 3.688556
#10    NA     1 2.611286

【讨论】:

  • 谢谢,希望在 group_by 中有一个参数可以让你这样做,但如果没有这个参数,我想这是最快和最简单的方法
猜你喜欢
  • 1970-01-01
  • 2018-11-03
  • 2021-09-27
相关资源
最近更新 更多