如何在tbl_summary()中同时配置两种digits参数规则?
解决tbl_summary()同时设置分类变量小数位与去除大数字分隔符的问题
直接上可行的代码方案:
library(gtsummary) library(tibble) # 构造示例数据 df <- tibble( a = sample(c('red', 'blue', 'pink'), size = 10000, replace = T), b = sample(c('car', 'bike', 'boat'), size = 10000, replace = T) ) # 同时实现两个需求的tbl_summary调用 df %>% tbl_summary( digits = list( # 给所有分类变量设置:频数0位小数,百分比1位小数 all_categorical() ~ c(0, 1), # 给所有数值去掉大数字分隔符(比如把3,000变成3000) ~label_style_number(big.mark = "") ) )
为什么之前的方法会出问题?
- 重复传
digits参数:R函数不允许同一个参数被多次赋值,自然会抛出「formal argument "digits" matches multiple specified arguments」错误。 - 合并规则时出错:如果之前合并的方式不对(比如把两个规则写在同一个公式里),会导致优先级冲突,全局规则覆盖了分类变量的小数位设置,才会出现所有值小数位变0的情况。
方案原理
gtsummary的digits参数支持传入一个规则列表,列表内的规则会按顺序生效:
- 先应用
all_categorical() ~ c(0,1),专门给分类变量的频数、百分比指定小数位; - 再应用全局规则
~label_style_number(big.mark = ""),处理所有数值的显示格式(去除大数字分隔符),但不会覆盖已经被分类变量规则指定的小数位设置。
内容的提问来源于stack exchange,提问作者mala fama
相关产品推荐
相关产品推荐

