使用gtsummary生成Likert数据汇总统计表的技术求助
5点Likert量表数据汇总统计表解决方案
需求与问题
需要基于5点Likert量表的受访者数据生成汇总表,要求:
- 每行对应一个调查项目
- 每列对应一个Likert选项,展示响应频率(n)和百分比(%)
- 额外包含平均值列
当前使用tbl_summary()生成的是每个项目独立的表格,不符合单表汇总的需求。
解决方案
通过数据格式转换+分组统计+表格美化的步骤实现,以下是完整代码(基于你提供的示例数据):
library(tidyverse) library(gt) library(glue) # 加载示例数据 df1 <- data.frame(ID = c(1, 2, 3, 4, 5), item1 = c('strongly support', 'neutral', 'oppose', 'somewhat oppose', 'somewhat support'), item2 = c('oppose', 'strongly support','somewhat support', 'strongly oppose', 'neutral'), item3 = c('oppose','oppose','oppose','strongly support','somewhat support'), item4 = c('oppose','strongly support','oppose','strongly support','somewhat support'), item5 = c('oppose','strongly oppose','oppose','strongly support','somewhat support')) # 1. 转换为长格式并为Likert选项赋值(用于计算平均值) df_long <- df1 %>% select(-ID) %>% pivot_longer(cols = everything(), names_to = "项目", values_to = "响应") %>% mutate( 响应数值 = case_when( 响应 == "strongly oppose" ~ 1, 响应 == "oppose" ~ 2, 响应 == "neutral" ~ 3, 响应 == "somewhat support" ~ 4, 响应 == "strongly support" ~ 5 ) ) # 2. 分组计算每个项目的统计量 summary_stats <- df_long %>% group_by(项目) %>% summarise( `强烈反对(n,%)` = glue("{sum(响应 == 'strongly oppose')}, {round(mean(响应 == 'strongly oppose')*100,1)}%"), `反对(n,%)` = glue("{sum(响应 == 'oppose')}, {round(mean(响应 == 'oppose')*100,1)}%"), `中立(n,%)` = glue("{sum(响应 == 'neutral')}, {round(mean(响应 == 'neutral')*100,1)}%"), `有点支持(n,%)` = glue("{sum(响应 == 'somewhat support')}, {round(mean(响应 == 'somewhat support')*100,1)}%"), `强烈支持(n,%)` = glue("{sum(响应 == 'strongly support')}, {round(mean(响应 == 'strongly support')*100,1)}%"), `平均值` = round(mean(响应数值, na.rm = TRUE), 2) ) # 3. 生成并美化汇总表格 summary_stats %>% gt() %>% tab_header(title = "**5点Likert量表响应汇总**") %>% fmt_markdown(columns = everything()) %>% cols_align(align = "center", columns = -`项目`) %>% tab_style( style = cell_text(weight = "bold"), locations = cells_column_labels() )
代码说明
- 格式转换:将宽格式数据转为长格式,便于按项目分组统计所有选项的响应情况。
- 数值赋值:给每个Likert文字选项分配对应数值,用于计算项目的平均响应值。
- 统计计算:通过
dplyr分组计算每个选项的响应次数和占比,同时算出平均值。 - 表格美化:用
gt包设置表头对齐、加粗列名等样式,生成符合需求的单表。
内容的提问来源于stack exchange,提问作者C_bath
相关产品推荐
相关产品推荐

