Двусторонняя таблица непредвиденных обстоятельств с частотами и процентами

Я получил следующую двустороннюю таблицу непредвиденных обстоятельств с процентами ячеек вместе с частотами (в скобках).

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)

Код R, который я использовал,

library(dplyr)

library(janitor)

starwars %>%
  filter(species == "Human") %>% 
  tabyl(gender, eye_color) %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting(digits = 2) %>%
  adorn_ns()

Однако я хочу получить такую ​​же таблицу с частотами ячеек вместе с процентами (в скобках). Любая помощь, пожалуйста.


person MYaseen208    schedule 11.05.2019    source источник
comment
Вы хотите (33.33%) (3). Попробуйте %>% mutate_at(-1, list(~ str_replace(., "^([0-9.%]+)", "(\\1)")))   -  person akrun    schedule 11.05.2019
comment
Спасибо @akrun за ваш комментарий. Однако я хочу что-то вроде этого 3 (33.33%).   -  person MYaseen208    schedule 11.05.2019


Ответы (1)


Мы можем изменить аргумент position в adorn_ns с rear (по умолчанию) на front.

library(tidyverse)
starwars %>%
  filter(species == "Human") %>% 
   tabyl(gender, eye_color) %>%
   adorn_percentages("row") %>%
   adorn_pct_formatting(digits = 2) %>%
   adorn_ns(position = "front")
# gender       blue blue-gray       brown      dark      hazel    yellow
# female 3 (33.33%) 0 (0.00%)  5 (55.56%) 0 (0.00%) 1 (11.11%) 0 (0.00%)
#   male 9 (34.62%) 1 (3.85%) 12 (46.15%) 1 (3.85%) 1  (3.85%) 2 (7.69%)

Или другой вариант, если объект уже создан, - это постобработка с mutate_at для изменения форматирования всех столбцов, кроме первого, путем захвата символов в двух блоках, реверсирования позиций путем реверсирования обратной ссылки при добавлении () для процента.

library(tidyverse)
starwars %>%
  filter(species == "Human") %>% 
  tabyl(gender, eye_color) %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting(digits = 2) %>%
  adorn_ns() %>% 
  mutate_at(-1, list(~ str_replace(., "^([0-9.%]+)\\s+\\((\\d+)\\)", "\\2 (\\1)")))
# gender       blue blue-gray       brown      dark      hazel    yellow
#1 female 3 (33.33%) 0 (0.00%)  5 (55.56%) 0 (0.00%) 1 (11.11%) 0 (0.00%)
#2   male 9 (34.62%) 1 (3.85%) 12 (46.15%) 1 (3.85%)  1 (3.85%) 2 (7.69%)
person akrun    schedule 11.05.2019