如何使用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
相关产品推荐
相关产品推荐

