如何在R中结合gtsummary与tidyverse实现带卡方检验的交叉表
用gtsummary实现分组交叉表并添加卡方检验脚注
步骤1:数据预处理(分组转换)
先把review、publish、pay三个数值变量按要求转换成分类变量:
- No:0-4
- Maybe:5
- Yes:6-10
library(tidyverse) library(gtsummary) # 生成用户提供的测试数据 set.seed(123) member <- sample(c("Yes", "No"), 100, replace = TRUE) author <- sample(c("Yes", "No"), 100, replace = TRUE) review <- sample(0:10, 100, replace = TRUE) publish <- sample(0:10, 100, replace = TRUE) pay <- sample(0:10, 100, replace = TRUE) data <- data.frame(member, author, review, publish, pay) # 批量处理三个变量的分组转换 data <- data %>% mutate( across(c(review, publish, pay), ~case_when( .x %in% 0:4 ~ "No", .x == 5 ~ "Maybe", .x %in% 6:10 ~ "Yes" ), .names = "{.col}_grp") )
步骤2:生成Member为行变量的交叉表
用gtsummary::tbl_cross生成带行/列总计、百分比的交叉表,并自动添加卡方检验结果作为脚注:
# Member与三个指标分组的交叉表 tbl_member <- data %>% select(member, review_grp, publish_grp, pay_grp) %>% # 把多列指标转成长格式,一次性生成合并交叉表 pivot_longer(cols = -member, names_to = "指标", values_to = "分组") %>% tbl_cross( row = member, col = c(指标, 分组), percent = "row", # 显示行百分比,需列百分比可改为"column" missing = "no" ) %>% add_total(rows = TRUE, cols = TRUE) %>% # 添加行、列总计 add_p(test = "chisq.test") %>% # 添加卡方检验P值 modify_header( stat_0 ~ "**分组**", stat_1 ~ "**No**", stat_2 ~ "**Maybe**", stat_3 ~ "**Yes**", stat_total ~ "**总计**" ) %>% modify_footnote( all_stat_cols() ~ "括号内为行百分比", p.value ~ "卡方检验P值" ) %>% modify_caption("表1:Member与各指标分组的交叉表") # 输出表格 tbl_member
步骤3:生成Author为行变量的交叉表
替换行变量为author即可快速生成另一组交叉表:
# Author与三个指标分组的交叉表 tbl_author <- data %>% select(author, review_grp, publish_grp, pay_grp) %>% pivot_longer(cols = -author, names_to = "指标", values_to = "分组") %>% tbl_cross( row = author, col = c(指标, 分组), percent = "row", missing = "no" ) %>% add_total(rows = TRUE, cols = TRUE) %>% add_p(test = "chisq.test") %>% modify_header( stat_0 ~ "**分组**", stat_1 ~ "**No**", stat_2 ~ "**Maybe**", stat_3 ~ "**Yes**", stat_total ~ "**总计**" ) %>% modify_footnote( all_stat_cols() ~ "括号内为行百分比", p.value ~ "卡方检验P值" ) %>% modify_caption("表2:Author与各指标分组的交叉表") # 输出表格 tbl_author
关键代码说明
across()批量处理三个数值变量的分组转换,保证格式统一pivot_longer()将多列指标合并为长格式,实现一次性生成多指标交叉表tbl_cross()的percent参数可灵活切换行/列百分比add_total()补充行、列总计,直观展示整体分布add_p()自动计算卡方检验并将结果嵌入表格modify_header()和modify_footnote()优化表格可读性,完全匹配需求格式
内容的提问来源于stack exchange,提问作者Cherson
相关产品推荐
相关产品推荐

