Я хотел бы использовать janitor::tabyl для создания двусторонних таблиц для каждой переменной с учетом данной переменной в данных. Например

library(tidyverse)
library(janitor)
humans <- starwars %>%
    filter(species == "Human")
t2 <- humans %>%
    tabyl(gender, eye_color)

t2 %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting(digits = 2) %>%
  adorn_ns()
#>  gender       blue blue-gray       brown      dark      hazel    yellow
#>  female 33.33% (3) 0.00% (0) 55.56%  (5) 0.00% (0) 11.11% (1) 0.00% (0)
#>    male 34.62% (9) 3.85% (1) 46.15% (12) 3.85% (1)  3.85% (1) 7.69% (2)

В идеале я хотел бы использовать purrr:map для перебора всех остальных переменных и выполнения приведенной выше таблицы в отношении gender. Пока что я создал основную таблицу после этот пост

humans %>%
  select_if(is.character) %>%
  select(-name, -gender) %>%
  imap(.f = ~janitor::tabyl(dat = humans, !!sym(.y), gender))

Но у меня возникают проблемы с применением аналогичной логики к ранее предоставленным вызовам adorn_*.

Есть ли способ сделать это с помощью purrr?

1
Jack Reimer 23 Сен 2020 в 10:23

1 ответ

Лучший ответ

Я не думаю, что что-то изменится и в вызове imap, вы можете просто передать (%>%) функции аналогичным образом:

library(janitor)
library(dplyr)

humans %>%
  select(where(is.character)) %>%
  select(-name, -gender) %>%
  purrr::imap(.f = ~tabyl(dat = humans, !!sym(.y), gender) %>%
                     adorn_percentages("row") %>%
                     adorn_pct_formatting(digits = 2) %>%
                     adorn_ns())

#$hair_color
#    hair_color    feminine   masculine
#        auburn 100.00% (1)   0.00% (0)
#  auburn, grey   0.00% (0) 100.00% (1)
# auburn, white   0.00% (0) 100.00% (1)
#         black  12.50% (1)  87.50% (7)
#         blond   0.00% (0) 100.00% (3)
#         brown  42.86% (6)  57.14% (8)
#   brown, grey   0.00% (0) 100.00% (1)
#          grey   0.00% (0) 100.00% (1)
#          none   0.00% (0) 100.00% (3)
#         white  50.00% (1)  50.00% (1)

#$skin_color
# skin_color   feminine    masculine
#       dark  0.00% (0) 100.00%  (4)
#       fair 18.75% (3)  81.25% (13)
#      light 54.55% (6)  45.45%  (5)
#       pale  0.00% (0) 100.00%  (1)
#        tan  0.00% (0) 100.00%  (2)
#      white  0.00% (0) 100.00%  (1)
#....
2
Ronak Shah 23 Сен 2020 в 07:31