【问题标题】:How to Output a List of Summaries From Different Grouping Variables When Using Dplyr::Group_by and Dplyr::Summarise使用 Dplyr::Group_by 和 Dplyr::Summarise 时如何从不同的分组变量中输出摘要列表
【发布时间】:2018-07-12 12:54:40
【问题描述】:
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 作为分组变量,一个用于 cyl 和 am 作为分组变量。

我觉得类似于以下内容的东西应该可以工作,但我似乎无法弄清楚。我希望有一个 rlang 或 purrr 解决方案。帮助将不胜感激。

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

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

【问题讨论】:

    标签: r tidyverse purrr rlang


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-23
      • 2018-04-30
      相关资源
      最近更新 更多