如何使用 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
我有一个包含大量分类变量的大型数据集,我想为其创建摘要。
考虑这个最小的例子。
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