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

如何基于合并纵向研究数据集构建并列对比分析表格

生成两项纵向研究特征并列表格

需求说明

我有一个合并数据集,包含两项纵向研究(study1与study2)的测量记录,示例数据如下:

data <- data.frame(
  weight_study1 = rnorm(100, mean = 60, sd = 5),  # 数值型变量
  weight_study2 = rnorm(100, mean = 62, sd = 6),  # 数值型变量
  gender_study1 = sample(c("Male", "Female"), 100, replace = TRUE),  # 分类变量
  gender_study2 = sample(c("Male", "Female"), 100, replace = TRUE)  # 分类变量
)

需要创建一个并列表格,将study1与study2的分析结果分别置于表格两侧,期望输出样式如下:

Characteristics Pilot study 1 Pilot study 2 
Age             34(3)         67(8)
Gender          Male (40%)    Male(30%)
                Female (60%)  Female (70%)

解决方案

下面提供两种在R中实现的方法,按需选择:

方式一:用tableone包快速生成(推荐)

tableone是专门生成基线特征对比表的工具,步骤如下:

  1. 安装并加载依赖包
install.packages(c("tableone", "dplyr"))
library(tableone)
library(dplyr)
  1. 把宽格式数据转成适合分组的长格式
# 拆分并标记两组数据
data_study1 <- data %>%
  select(weight = weight_study1, gender = gender_study1) %>%
  mutate(study = "Pilot study 1")

data_study2 <- data %>%
  select(weight = weight_study2, gender = gender_study2) %>%
  mutate(study = "Pilot study 2")

# 合并成长格式
data_long <- bind_rows(data_study1, data_study2)
  1. 生成并输出Markdown格式表格
# 指定变量类型
vars <- c("weight", "gender")
catVars <- c("gender")

# 创建特征表
table <- CreateTableOne(vars = vars, 
                        factorVars = catVars, 
                        data = data_long, 
                        strata = "study")

# 输出为Markdown格式
print(table, printToggle = FALSE, format = "markdown")

输出示例:

CharacteristicsPilot study 1 (N=100)Pilot study 2 (N=100)
weight (mean (sd))59.8 (4.9)62.1 (5.8)
gender = Male (%)48 (48.0)52 (52.0)
gender = Female (%)52 (52.0)48 (48.0)

方式二:手动计算后构建表格

如果不想用第三方包,可手动统计后生成表格:

# 计算study1的统计值
weight1_stats <- sprintf("%.1f(%.1f)", mean(data$weight_study1), sd(data$weight_study1))
gender1_male <- sprintf("Male (%.0f%%)", mean(data$gender_study1 == "Male")*100)
gender1_female <- sprintf("Female (%.0f%%)", mean(data$gender_study1 == "Female")*100)

# 计算study2的统计值
weight2_stats <- sprintf("%.1f(%.1f)", mean(data$weight_study2), sd(data$weight_study2))
gender2_male <- sprintf("Male (%.0f%%)", mean(data$gender_study2 == "Male")*100)
gender2_female <- sprintf("Female (%.0f%%)", mean(data$gender_study2 == "Female")*100)

# 构建表格数据框
table_df <- data.frame(
  Characteristics = c("Weight", "Gender", ""),
  `Pilot study 1` = c(weight1_stats, gender1_male, gender1_female),
  `Pilot study 2` = c(weight2_stats, gender2_male, gender2_female)
)

# 输出Markdown表格
knitr::kable(table_df, align = "lll")

输出示例:

CharacteristicsPilot study 1Pilot study 2
Weight59.8(4.9)62.1(5.8)
GenderMale (48%)Male (52%)
Female (52%)Female (48%)

内容的提问来源于stack exchange,提问作者user19807620

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 05:58:40