使用Dplyr :: Group_by和Dplyr时如何从不同的分组变量输出摘要列表:: Summarize

时间:2018-02-02 04:15:42

标签: r tidyverse purrr rlang

library(tidyverse)

使用mtcars数据集中的一个简单示例,我可以通过cyl分组并获得基本计数......

mtcars%>%group_by(cyl)%>%summarise(Count=n())

我可以通过cyl和am分组......

mtcars%>%group_by(cyl,am)%>%summarise(Count=n())

然后我可以创建一个允许我输入多个分组变量的函数。

Fun<-function(dat,...){
dat%>%
group_by_at(vars(...))%>%
summarise(Count=n())
}

但是,我想输出两个摘要列表,一个用于计数,其中一个用于循环作为分组变量,一个用于cyl和am作为分组变量,而不是输入多个分组变量。

我觉得类似下面的东西应该有效,但我似乎无法弄明白。我希望有一个rlang或purrr解决方案。帮助将不胜感激。

Groups<-list("cyl",c("cyl","am"))

mtcars%>%group_by(!!Groups)%>%summarise(Count=n())

1 个答案:

答案 0 :(得分:1)

这是一种符合tidyeval标准的工作方法。

library(tidyverse)
library(rlang)

Groups <- list("cyl" ,c("cyl","am"))

Groups %>%
  map(function(group) {
    syms <- syms(group)
    mtcars %>%
      group_by(!!!syms) %>%
      summarise(Count = n())
  })

#> [[1]]
#> # A tibble: 3 x 2
#>     cyl Count
#>   <dbl> <int>
#> 1     4    11
#> 2     6     7
#> 3     8    14
#> 
#> [[2]]
#> # A tibble: 6 x 3
#> # Groups:   cyl [?]
#>     cyl    am Count
#>   <dbl> <dbl> <int>
#> 1     4     0     3
#> 2     4     1     8
#> 3     6     0     4
#> 4     6     1     3
#> 5     8     0    12
#> 6     8     1     2