#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))