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

如何在临床试验报告的rtables表1中为分类变量添加百分比

解决rtables生成基线表时分类变量显示计数+百分比的问题

需求与问题

在临床试验论文的「表1(基线受试者特征)」中,需为分类变量的每个水平添加百分比,rtables包生成的其他内容符合预期,但默认仅显示计数。原示例代码中分类变量(SEX、COLOR、SOUND)仅展示计数,期望呈现「计数(百分比)」格式(如16 (47.1%)),尝试多种方法均存在问题:

  • 合并变量分析导致所有水平折叠,仅显示总计数及100%;
  • 按多变量拆分行时出现递归索引错误;
  • 单独拆分每个变量并分析,虽得到百分比,但变量层级混乱,所有水平混排且带有函数标签Cat_Summary。

解决方案

核心是修改分析函数中因子变量的处理逻辑,计算每个水平的计数与对应列的百分比,同时保留正确的表格层级。以下是完整修改后的代码:

require(rtables)
set.seed(6502)
SubjChar <- data.frame(
  USUBJID = c(101:200),
  TREATMENT = as.factor(sample(c("Placebo", "Drug A", "Drug B"), 100, replace = TRUE)),
  AGE = c(rnorm(100) * 5 + 30),
  HEIGHT = c(rnorm(100) * 20 + 180),
  WEIGHT = c(rnorm(100) * 15 + 80),
  SEX = as.factor(sample(c("Male", "Female"), 100, replace = TRUE)),
  COLOR = as.factor(sample(c("Blue", "Green", "Pink", "Violet"), 100, replace = TRUE)),
  SOUND = as.factor(sample(c("Woof", "Meow", "Mooooooooo", "Quack"), 100, replace = TRUE))
)

flexible_summary <- function(x) {
  if (is.numeric(x)) {
    in_rows(
      "Mean (sd)" = rcell(c(mean(x, na.rm = TRUE), sd(x, na.rm = TRUE)), format = "xx.xx (xx.xx)"),
      "min - max" = rcell(range(x, na.rm = TRUE), format = "xx.xx - xx.xx")
    )
  } else if (is.factor(x)) {
    # 获取当前列的有效样本总数(排除NA)
    total <- sum(!is.na(x))
    # 统计每个因子水平的计数
    level_counts <- table(x, useNA = "no")
    # 构建每个水平的行元素
    row_elements <- lapply(names(level_counts), function(level) {
      count <- as.integer(level_counts[level])
      pct <- (count / total) * 100
      # 用自定义格式显示计数和百分比
      rcell(c(count, pct), format = "xx (xx.x%)")
    })
    # 为行元素命名为对应因子水平,保证层级正确
    names(row_elements) <- names(level_counts)
    do.call(in_rows, row_elements)
  } else {
    stop("type not supported")
  }
}

# 构建表格布局
lyt1 <- basic_table(show_colcounts = TRUE) %>%
  split_cols_by("TREATMENT") %>%
  analyze(vars = c("AGE", "HEIGHT", "WEIGHT", "SEX", "COLOR", "SOUND"), flexible_summary)

# 生成最终表格
(Table1 <- build_table(lyt1, SubjChar))

关键修改说明

  • 计算列样本总数:通过sum(!is.na(x))获取当前分组列的有效样本量,作为百分比计算的分母;
  • 自定义显示格式:使用rcell传入计数和百分比组成的向量,通过format = "xx (xx.x%)"控制输出样式,保证格式统一;
  • 保持层级结构:将每个行元素命名为对应因子水平,避免出现混乱的函数标签,确保表格层级符合基线表的规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 09:24:54