Объедините несколько таблиц частот вместе в R

#r

#r

Вопрос:

Я пытаюсь создать таблицу с частотой нескольких категориальных переменных. У меня есть такие данные:

 id animal color shape 1 bear orange circle 2. dog blue triangle 3. dog yellow square 4. bear yellow square 5. cat yellow rectangle   

Я хочу получить такой столик, как этот:

 Variable Level freq(n=5) percent  animal bear 2 40.0  dog 2 40.0  cat 1 20.0   color orange 1 20.0  blue 1 20.0  yellow 3 60.0  shape circle 1 20.0  triangle 1 20.0  square 2 40.0  rectangle 1 20.0   

Я могу составить таблицы частот для них по отдельности, но мне было интересно, знает ли кто-нибудь пакет или что-нибудь, что может легко сложить их таким образом. Спасибо!

Комментарии:

1. Вы можете использовать tbl_summary , например library(gtsummary);tbl_summary(df1, include = -id) %gt;% modify_footnote(everything() ~ NA)

Ответ №1:

Обновление: Лучше:

 df1 lt;- df %gt;%   pivot_longer(  -id,  names_to = "Variable",  values_to = "Level"  ) %gt;%   group_by(Variable, Level) %gt;%   summarise(freq = n()) %gt;%   mutate(percent = freq/sum(freq)*100) %gt;%   mutate(Variable = ifelse(duplicated(Variable), NA, Variable)) %gt;%   ungroup()  library(flextable) flextable(df1)  

введите описание изображения здесь

 library(dplyr) library(tidyr)  df %gt;%   pivot_longer(  -id,  names_to = "Variable",  values_to = "Level"  ) %gt;%   group_by(Variable, Level) %gt;%   summarise(freq = n()) %gt;%   mutate(percent = freq/sum(freq)*100)   
 Variable Level freq percent  lt;chrgt; lt;chrgt; lt;intgt; lt;dblgt;  1 animal bear 2 40  2 animal cat 1 20  3 animal dog 2 40  4 color blue 1 20  5 color orange 1 20  6 color yellow 3 60  7 shape circle 1 20  8 shape rectangle 1 20  9 shape square 2 40 10 shape triangle 1 20  

Ответ №2:

Один из способов с gtsummary

 library(purrr) library(gtsummary) library(dplyr)  out lt;- map(c("{n}", "{p}.0"),  ~df1 %gt;%   tbl_summary(  statistic = ~ .x,  include = -id  )   ) %gt;%  tbl_merge() %gt;%  modify_spanning_header(everything() ~ NA) %gt;%  modify_footnote(everything() ~ NA) %gt;%  modify_header(list(var_label ~ "**Variable**",  label ~ "**Level**", stat_0_1 ~ "**freq(n = 5)**",  stat_0_2 ~ "**percent**"))     out[1]$table_body lt;- out[1]$table_body %gt;%   filter(duplicated(var_label)) %gt;%   mutate(var_label = replace(var_label, duplicated(var_label), ""))  

-выход

введите описание изображения здесь

данные

 df1 lt;- structure(list(id = c(1, 2, 3, 4, 5), animal = c("bear", "dog",  "dog", "bear", "cat"), color = c("orange", "blue", "yellow",  "yellow", "yellow"), shape = c("circle", "triangle", "square",  "square", "rectangle")), class = "data.frame", row.names = c(NA,  -5L))