如何使用 group_by 将函数映射到因子变量并进行总结

How to map a function to factor variables with group_by and summarise

我有一个包含大量分类变量的大型数据集,我想为其创建摘要。

考虑这个最小的例子。

library(dplyr)
library(purrr)    
set.seed(1)
dat <- data.frame(x = rep(LETTERS[1:4], times = c(2:5)),
                y = rep(letters[1:4], times = c(5:2)),
                z = rnorm(14))

我可以使用 map:

创建频率表
dat %>% select_if(is.character) %>% map(table)

出于某些原因,我想使用 dplyr 给我频率表。以下代码片段有效。

dat %>% group_by(x) %>% summarise(n())

但是下面没有。

dat %>% select_if(is.character) %>% 
    map(function(x) group_by(x) summarise(n())

这将引发以下错误:

Error: unexpected symbol in "dat %>% select_if(is.character) %>% map(function(x) group_by(x) summarise"

我该如何解决这个错误?

您缺少管道 %>% 和要传递给 group_by 的数据帧:

dat %>% 
    select_if(is.factor) %>% 
    map(function(x) group_by(., x) %>% summarise(n = n()))

#$x
# A tibble: 4 x 2
#  x          n
#  <fctr> <int>
#1 A          2
#2 B          3
#3 C          4
#4 D          5

#$y
# A tibble: 4 x 2
#  x          n
#  <fctr> <int>
#1 A          2
#2 B          3
#3 C          4
#4 D          5

或者最好只使用 count:

dat %>% select_if(is.factor) %>% map(function(x) count(., x))

#$x
# A tibble: 4 x 2
#  x          n
#  <fctr> <int>
#1 A          2
#2 B          3
#3 C          4
#4 D          5

#$y
# A tibble: 4 x 2
#  x          n
#  <fctr> <int>
#1 A          2
#2 B          3
#3 C          4
#4 D          5