Как использовать purrr для программной кошки и / или распечатки вывода janitor tabyl - PullRequest
0 голосов
/ 09 ноября 2018

Допустим, вы используете tidyverse для вложения () выбранной группы категориальных переменных:

library(tidyverse)
library(janitor)

nested_df <- mpg %>%
  select(manufacturer, class) %>%
  gather(variable, value) %>%
  group_by(variable) %>%
  nest()

nested_df
# A tibble: 2 x 2
  variable     data              
  <chr>        <list>            
1 manufacturer <tibble [234 x 1]>
2 class        <tibble [234 x 1]>

Теперь мы можем добавить новый столбец, который содержит вывод из janitor::tabyl:

nested_df %>%
  mutate(
    table_output = map(data, ~ tabyl(.$value))
  )

# A tibble: 2 x 3
  variable     data               table_output    
  <chr>        <list>             <list>          
1 manufacturer <tibble [234 x 1]> <tabyl [15 x 3]>
2 class        <tibble [234 x 1]> <tabyl [7 x 3]> 

Вопросы:

  1. Как мы можем распечатать или пройти через вывод, чтобы получить как variable имя, так и table_output?
  2. Есть ли лучший подход (например, использовать split вместо group_by %>% nest?

Что-то вроде печати следующего ...

Variable is: manufacturer

Tabyl Output:

    .$value  n    percent
       audi 18 0.07692308
  chevrolet 19 0.08119658
      dodge 37 0.15811966
       ford 25 0.10683761
 ...more rows...
    mercury  4 0.01709402
     nissan 13 0.05555556
    pontiac  5 0.02136752
     subaru 14 0.05982906
     toyota 34 0.14529915
 volkswagen 27 0.11538462


Variable is: class

Tabyl Output:

    .$value  n    percent
    2seater  5 0.02136752
    compact 47 0.20085470
    midsize 41 0.17521368
    minivan 11 0.04700855
     pickup 33 0.14102564
 subcompact 35 0.14957265
        suv 62 0.26495726

1 Ответ

0 голосов
/ 09 ноября 2018

Мы можем использовать pwalk, cat и print. Входные данные для pwalk представляют собой data.frame (список списков), содержащий только столбцы variable и table_output. Подобно pmap, pwalk проходит через каждый элемент обоих столбцов одновременно и на них ссылаются .x и .y в анонимной функции. В отличие от pmap, pwalk выполняет код без возврата какого-либо вывода. Это полезно, когда нам нужен только побочный эффект выполнения кода:

library(tidyverse)
library(janitor)

nested_df <- mpg %>%
  select(manufacturer, class) %>%
  gather(variable, value) %>%
  group_by(variable) %>%
  nest()

nested_df %>%
  mutate(
    table_output = map(data, ~ tabyl(.$value))
  ) %>%
  select(-data) %>%
  pwalk(~{
    cat(paste0('Variable is: ', .x, '\n\nTabyl Output: \n\n')) 
    print(.y)
    cat('\n\n')
  })

Для печати строк мы используем cat, чтобы избежать [1] впереди. Чтобы напечатать вывод таблицы, мы используем print. "\n" s добавлены в пустые строки панели для удобства чтения.

Выход:

Variable is: manufacturer

Tabyl Output: 

    .$value  n    percent
       audi 18 0.07692308
  chevrolet 19 0.08119658
      dodge 37 0.15811966
       ford 25 0.10683761
      honda  9 0.03846154
    hyundai 14 0.05982906
       jeep  8 0.03418803
 land rover  4 0.01709402
    lincoln  3 0.01282051
    mercury  4 0.01709402
     nissan 13 0.05555556
    pontiac  5 0.02136752
     subaru 14 0.05982906
     toyota 34 0.14529915
 volkswagen 27 0.11538462


Variable is: class

Tabyl Output: 

    .$value  n    percent
    2seater  5 0.02136752
    compact 47 0.20085470
    midsize 41 0.17521368
    minivan 11 0.04700855
     pickup 33 0.14102564
 subcompact 35 0.14957265
        suv 62 0.26495726
...