我有一个包含大量分类变量的大型数据集,我想为其创建摘要。
考虑这个最小的例子。
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"
如何解决此错误?
答案 0 :(得分:2)
您错过了管道%>%
以及要传递给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