gtsummary表格所有数值小数点替换为逗号失败求助
解决tbl_summary转gt后全表格小数点替换为逗号的问题
问题核心在于:tbl_summary生成的描述统计量列是字符型字符串,而非数值型,gt的fmt_number只对数值列生效,这就是你之前操作只有p值(数值型)能改,其他统计量没变化的原因。
直接给两种可行方案:
方案1:在tbl_summary阶段就设置格式(推荐)
不用等转成gt再改,直接在生成汇总表时统一指定小数分隔符,代码示例:
library(gtsummary) library(gt) # 替换成你的数据集和分组变量 your_data %>% tbl_summary(by = group_var) %>% # 给所有统计量列设置格式:逗号做小数分隔符,点做千分位,保留2位小数 modify_fmt_fun( all_stat_cols(), ~ style_number(., decimal.mark = ",", big.mark = ".", digits = 2) ) %>% # 单独给p值列设置格式:保留3位小数,用逗号做分隔符 modify_fmt_fun( all_p_cols(), ~ style_number(., decimal.mark = ",", big.mark = ".", digits = 3) ) %>% # 处理缺失值行的数值格式 modify_fmt_fun( rows = contains("Missing Values"), ~ style_number(., decimal.mark = ",", big.mark = ".") ) %>% as_gt()
这个方法一步到位,所有数值(包括统计量、缺失值计数/百分比、p值)都会自动用逗号做小数分隔符。
方案2:转成gt后处理(适合已生成tbl_summary表格的情况)
如果已经有现成的tbl_summary对象,需要先把字符型的统计量列转成数值再格式化,需处理带范围的统计量(比如"12.3 (4.5-6.7)"),示例代码:
# 假设你已经有了tbl_summary对象tbl gt_tbl <- tbl %>% as_gt() gt_tbl %>% text_transform( locations = cells_body(columns = starts_with("stat_")), fn = function(x) { # 处理单个数值的情况 if (grepl("^\\d+\\.\\d+$", x)) { style_number(as.numeric(x), decimal.mark = ",", big.mark = ".", digits = 2) } # 处理范围类统计量(均值±标准差、中位数四分位距等) else if (grepl("\\d+\\.\\d+.*\\d+\\.\\d+", x)) { nums <- as.numeric(stringr::str_extract_all(x, "\\d+\\.\\d+")[[1]]) formatted_nums <- style_number(nums, decimal.mark = ",", big.mark = ".", digits = 2) stringr::str_replace_all(x, "\\d+\\.\\d+", formatted_nums) } # 整数等其他情况直接保留 else x } ) %>% # 格式化p值 fmt_number( columns = matches("p.value|p_val"), decimals = 3, dec_mark = ",", sep_mark = "." ) %>% # 格式化缺失值行 fmt( columns = everything(), rows = contains("Missing Values"), fns = function(x) style_number(as.numeric(x), decimal.mark = ",", big.mark = ".") )
这个方法需要处理不同格式的字符串,相对繁琐,优先推荐方案1。
内容的提问来源于stack exchange,提问作者user28621661
相关产品推荐
相关产品推荐

