табулировать с помощью tabyl путем группировки переменных с использованием group_split и group_map - PullRequest
0 голосов
/ 25 октября 2019

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

Есть предложения, пожалуйста?

1 Ответ

1 голос
/ 25 октября 2019
  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))

...