要一次获得一列或多列的快速频率(制表),我可以使用tabyl
函数,如下所示:
library(janitor)
library(tidyverse)
#tabulate one column at a time
iris %>%
tabyl(Petal.Width)
#tabulate multiple columns at once using map
iris %>%
select(Petal.Width, Petal.Length) %>%
map(tabyl)
我正在尝试复制这两种情况,但是通过分组变量Species
来输出输出。我想要最简单的解决方案,并且想尝试使用更新的group_split
和group_map
命令。
我已经能够以数据帧格式生成类似类型的输出(尽管对于多个变量,tabyl
生成的简单列表正是我想要的):
#works
iris %>%
group_by(Species) %>%
nest() %>%
mutate(out = map(data, ~ tabyl(.x$Petal.Width) %>%
as_tibble)) %>%
select(-data) %>%
unnest
这行得通,但是我想它可能会更简单一些,例如我的列方法,我正在为每个分组变量的一列考虑类似的事情:
#by group for one column
iris %>%
group_by(Species) %>%
group_split() %>%
map(~tabyl(Petal.Width))
对于多列,我不确定是否需要此处的选择行?也许group_map可以将其简化为一行?
#by group for multiple columns
iris %>%
#do i need to select grouping variable and variables of interest?
select(Species, Petal.Width, Petal.Length) %>%
group_by(Species) %>%
group_split() %>%
map(~tabyl()) #could I use group_map and select the columns at once?
有什么建议吗?
答案 0 :(得分:1)
iris %>%
#use split(.$Species) if you need a list with names
group_split(Species) %>%
map(~imap(.x %>%select(Species, Petal.Width, Petal.Length),
function(x,y){
out <-tabyl(x)
colnames(out)[1]=y
out}))
如果您需要第一列的默认列名称,则可以执行iris %>% group_split(Species) %>% map(~map(.x, tabyl))