如何将pairwise.t.test结果转为规范数据框用于ShinyApp分析
问题描述
需要将pairwise.t.test的结果整理成指定格式的结构化表格,用于后续ShinyApp分析。现有数据集seguro1包含数值变量tmp_habilit、estciv、nmultas,以及分组变量group、group1。此前尝试的cross_df+map2方案未成功,期望输出包含variaveis、grupos、group1、group2、p.value的标准化表格。
现有数据集代码:
seguro1=structure(list(id = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20), tmp_habilit = c(20, 21, 25, 25, 18, 23, 9, 12, 15, 14, 15, 10, 8, 7, 11, 10, 7, 9, 1, 3), estciv = c(3, 3, 3, 2, 2, 1, 3, 2, 1, 2, 1, 3, 2, 2, 1, 2, 2, 1, 3, 1), nmultas = c(1, 0, 2, 3, 2, 2, 6, 4, 3, 2, 5, 5, 4, 13, 15, 9, 6, 10, 8, 5), group = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("2", "1", "3"), class = "factor"), group1 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("1", "2", "3"), class = "factor")), .Names = c("id", "tmp_habilit", "estciv", "nmultas", "group", "group1"), row.names = c(NA, -20L ), class = "data.frame")
正确实现代码
通过明确变量组合、运行检验并整理结果,可得到目标格式的表格:
library(purrr) library(dplyr) library(tidyr) library(broom) # 定义待分析的数值变量名和分组变量名 variaveis <- names(seguro1)[2:4] grupos <- c("group", "group1") # 生成变量-分组组合、运行检验并整理结果 resultado_final <- cross_df(list(variaveis = variaveis, grupos = grupos)) %>% mutate( # 对每个组合运行成对t检验(Bonferroni校正) ttest = map2(variaveis, grupos, ~pairwise.t.test( x = seguro1[[.x]], g = seguro1[[.y]], p.adjust.method = "bonferroni" )), # 将检验结果转换为整洁格式 ttest_tidy = map(ttest, tidy) ) %>% # 展开嵌套结果 unnest(ttest_tidy) %>% # 调整列名与顺序以匹配需求 select(variaveis, grupos, group1, group2, p.value) # 查看完整结果 print(resultado_final, n = 18)
代码说明
cross_df(...):生成数值变量与分组变量的所有可能组合,确保每个变量都和每个分组完成检验。map2(...):批量执行成对t检验,指定Bonferroni方法校正p值。map(ttest, tidy):使用broom包将原生检验结果转换为结构化数据框,便于后续处理。unnest(...):将嵌套的结果展开为扁平表格,最后调整列顺序以匹配目标格式。
内容的提问来源于stack exchange,提问作者neves
相关产品推荐
相关产品推荐

