Как вывести список сводок из разных переменных группировки при использовании Dplyr :: Group_by и Dplyr :: Summarize

library(tidyverse)

Используя простой пример из набора данных mtcars, я могу группировать по цилиндрам и получать базовые подсчеты с помощью этого ...

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

И я могу группировать как по цилиндрам, так и по я ...

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

Затем я могу создать функцию, которая позволит мне вводить несколько группирующих переменных.

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

Однако вместо того, чтобы вводить несколько группирующих переменных, я хотел бы вывести список из двух сводок, один для счетчиков с цил в качестве группирующей переменной, а другой для цил и am в качестве группирующих переменных.

Я чувствую, что должно сработать что-то похожее на следующее, но я не могу этого понять. Я надеюсь на решение rlang или purrr. Помощь будет оценена.

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

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

person Mike    schedule 02.02.2018    source источник


Ответы (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
person zlipp    schedule 02.02.2018