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

如何使用tableone包修改描述统计表的行百分比?

实现tableone包输出行百分比的方法

tableone包的print.TableOne方法确实没有直接设置行百分比的参数,需要手动处理输出的表格数据来实现。以下是具体步骤:


步骤1:获取原始表格数据(不直接打印)

修改原代码中的print调用,添加printToggle = FALSE参数,返回表格的字符矩阵以便后续处理:

library(tableone)

myVars <- c("class", "age", "Sex", "bmi", "bmi_category",
            "drink_freq", "smoke_yn", "edu_dummy")

catVars <- c("class", "Sex", "bmi_category",
             "drink_freq", "smoke_yn", "edu_dummy")

tab1_inf <- CreateTableOne(vars = myVars, strata = "NEWDI",
                           data = TKA_table1, factorVars = catVars)

# 获取原始表格数据,不直接打印
a1 <- print(tab1_inf, exact = "NEWDI", showAllLevels = TRUE, printToggle = FALSE)

步骤2:编写函数转换为行百分比

编写自定义函数,提取分类变量行的计数,计算行占比并替换原内容:

convert_to_row_pct <- function(table_output, cat_vars) {
  # 匹配所有分类变量对应的行(包含各水平)
  cat_row_indices <- grep(paste(cat_vars, collapse = "|"), rownames(table_output))
  
  for (i in cat_row_indices) {
    # 从每个单元格中提取原始计数(n)
    counts <- sapply(table_output[i, ], function(cell) {
      as.numeric(strsplit(gsub("[()%]", "", cell), " ")[[1]][1])
    })
    
    # 计算该行的总计数
    row_total <- sum(counts)
    # 计算行百分比并格式化输出
    table_output[i, ] <- sprintf("%d (%.1f%%)", counts, (counts / row_total) * 100)
  }
  
  return(table_output)
}

步骤3:应用函数并打印结果

调用自定义函数处理表格,然后打印转换后的结果:

# 转换为行百分比表格
a1_row_pct <- convert_to_row_pct(a1, catVars)

# 打印最终表格(quote=FALSE避免输出引号)
print(a1_row_pct, quote = FALSE)

说明

  • 该方法仅针对分类变量行计算行百分比,连续变量的描述统计(如均数±标准差)保持不变。
  • 如果需要调整百分比的小数位数,修改sprintf中的%.1f%%即可(例如%.2f%%保留两位小数)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 00:06:59