Как использовать purrr для программной кошки и / или распечатки вывода janitor tabyl
Скажем, вы используете 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]>
Вопросы:
- Как мы можем распечатать или пройти через вывод, чтобы получить как
variable
имя иtable_output
? - Есть ли лучший подход (например, использование
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 ответ
Мы можем использовать 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