Чтобы получить быструю частоту (табулирование) одного столбца или нескольких столбцов одновременно, я использую функцию 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?
Есть предложения, пожалуйста?