You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何手动创建含均值差置信区间与P值的组间对比统计汇总表

数据定义代码

mydata <- structure(list(Weight = c(66.2, 65.2, 69.8, 63.4, 67.4, 66.3, 
                         63.8, 67.8, 66.7, 66.2, 61.9, 66.9, 69.4, 60.8, 64.1, 62.8, 62.5, 
                         60.9, 61.3, 67.8), Age = c(68, 67, 65, 65, 63, 64, 68, 65, 65, 
                                                    71, 64, 65, 68, 61, 65, 62, 60, 66, 62, 58), 
               Sex = c("H", "H", 
                        "H", "H", "H", "H", "F", "F", "F", "F", "H", "H", "H", "F", "F", 
                        "F", "F", "F", "F", "F"),
               Group = c("G1", "G1", "G1", "G1", 
                          "G1", "G1", "G1", "G1", "G1", "G1", "G2", "G2", "G2", "G2", "G2",
                          "G2", "G2", "G2", "G2", "G2")), row.names = c(NA, -20L), 
          class = "data.frame")

需求说明

需要手动创建统计汇总表对比两组变量,表中需包含均值差的置信区间与P值,最终通过Rmarkdown导出为Word格式。目前已手动完成Weight变量的参数计算:

confInt <- paste(round(t.test(mydata$Weight~mydata$Group)$conf.int[1],2),
               round(t.test(mydata$Weight~mydata$Group)$conf.int[2],2),sep = ";")
p.value <- round(t.test(mydata$Weight~mydata$Group)$p.value,3)

mean1 <- mean(mydata$Weight[mydata$Group=="G1"])
mean2 <- mean(mydata$Weight[mydata$Group=="G2"])

mean_diff <- (mean(mydata$Weight[mydata$Group=="G1"]) -
mean(mydata$Weight[mydata$Group=="G2"]))

希望通过循环或函数批量处理所有数值变量的上述参数,再用rbind合并结果,生成完整的汇总表。


批量处理与汇总表生成

1. 筛选数值变量

先从数据框中提取所有数值型变量(排除分类变量Sex和分组变量Group):

num_vars <- names(mydata)[sapply(mydata, is.numeric)]

2. 自定义统计函数

编写函数批量计算单变量的统计参数:

get_stats <- function(var_name) {
  var_data <- mydata[[var_name]]
  # 计算两组均值
  mean_g1 <- mean(var_data[mydata$Group == "G1"])
  mean_g2 <- mean(var_data[mydata$Group == "G2"])
  # 均值差
  mean_diff <- mean_g1 - mean_g2
  # t检验结果
  t_result <- t.test(var_data ~ mydata$Group)
  # 格式化置信区间
  conf_int <- paste(round(t_result$conf.int[1], 2), round(t_result$conf.int[2], 2), sep = ";")
  # 格式化P值
  p_val <- round(t_result$p.value, 3)
  
  # 返回结构化结果
  data.frame(
    变量名 = var_name,
    G1均值 = round(mean_g1, 2),
    G2均值 = round(mean_g2, 2),
    均值差 = round(mean_diff, 2),
    均值差置信区间 = conf_int,
    P值 = p_val,
    stringsAsFactors = FALSE
  )
}

3. 批量生成汇总表

用lapply遍历所有数值变量,再合并结果:

summary_table <- do.call(rbind, lapply(num_vars, get_stats))

运行后得到的summary_table示例输出:

变量名 G1均值 G2均值 均值差 均值差置信区间  P值
1 Weight  66.28  63.63   2.65      0.64;4.66 0.013
2    Age  66.10  63.10   3.00      0.08;5.92 0.045

4. Rmarkdown导出Word

将以下内容保存为.Rmd文件,点击RStudio的「Knit」按钮即可生成Word文档:

---
title: "两组变量统计汇总表"
output: word_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
# 加载数据
mydata <- structure(list(Weight = c(66.2, 65.2, 69.8, 63.4, 67.4, 66.3, 
                         63.8, 67.8, 66.7, 66.2, 61.9, 66.9, 69.4, 60.8, 64.1, 62.8, 62.5, 
                         60.9, 61.3, 67.8), Age = c(68, 67, 65, 65, 63, 64, 68, 65, 65, 
                                                    71, 64, 65, 68, 61, 65, 62, 60, 66, 62, 58), 
               Sex = c("H", "H", 
                        "H", "H", "H", "H", "F", "F", "F", "F", "H", "H", "H", "F", "F", 
                        "F", "F", "F", "F", "F"),
               Group = c("G1", "G1", "G1", "G1", 
                          "G1", "G1", "G1", "G1", "G1", "G1", "G2", "G2", "G2", "G2", "G2",
                          "G2", "G2", "G2", "G2", "G2")), row.names = c(NA, -20L), 
          class = "data.frame")
# 定义统计函数
get_stats <- function(var_name) {
  var_data <- mydata[[var_name]]
  mean_g1 <- mean(var_data[mydata$Group == "G1"])
  mean_g2 <- mean(var_data[mydata$Group == "G2"])
  mean_diff <- mean_g1 - mean_g2
  t_result <- t.test(var_data ~ mydata$Group)
  conf_int <- paste(round(t_result$conf.int[1], 2), round(t_result$conf.int[2], 2), sep = ";")
  p_val <- round(t_result$p.value, 3)
  
  data.frame(
    变量名 = var_name,
    G1均值 = round(mean_g1, 2),
    G2均值 = round(mean_g2, 2),
    均值差 = round(mean_diff, 2),
    均值差置信区间 = conf_int,
    P值 = p_val,
    stringsAsFactors = FALSE
  )
}
# 生成汇总表
num_vars <- names(mydata)[sapply(mydata, is.numeric)]
summary_table <- do.call(rbind, lapply(num_vars, get_stats))

统计结果汇总表

knitr::kable(summary_table, align = "c")
内容的提问来源于stack exchange,提问作者Seydou GORO
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 00:20:30