使用 Dplyr::Group_by 和 Dplyr::Summarise 时如何从不同分组变量输出摘要列表
How to Output a List of Summaries From Different Grouping Variables When Using Dplyr::Group_by and Dplyr::Summarise
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())
这是一个有效的、符合 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
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())
这是一个有效的、符合 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