如何在gtsummary::tbl_summary中设置missing_stat的数字格式
解决gtsummary::tbl_summary缺失值百分比保留两位小数的问题
要让{p_miss}显示两位小数(比如0.01666显示为1.67%),可以用以下两种方法实现:
方法一:直接在missing_stat中格式化p_miss
修改missing_stat参数,用gtsummary::style_number()对p_miss进行格式化,指定保留两位小数:
data <- data.frame( group = c(rep("A", 50), rep("B", 9), rep(NA, 1)), height = c(rnorm(30, mean = 160, sd = 5), rnorm(30, mean = 170, sd = 6)), gender = c(rep("Male", 25), rep("Female", 34), rep(NA, 1)) ) tableT <- data %>% gtsummary::tbl_summary( type = list(all_continuous() ~ "continuous2", all_dichotomous() ~ "categorical"), statistic = list(all_continuous2() ~ "{mean} ({sd})", all_categorical() ~"{n} ({p}%)"), missing = "always", missing_text = "Missing", # 用style_number格式化p_miss,先转成百分比数值再保留两位小数 missing_stat = "{N_miss}/{N_obs} ({style_number(p_miss*100, digits = 2)})%", digits = list(all_categorical() ~ c(0, 2), all_continuous2() ~ c(2,2)), include = everything() )
这里需要把p_miss乘以100,因为它本身是比例值(0.01666),转成百分比数值(1.666)后再格式化,才能得到1.67%的结果。
方法二:用modify_fmt_fun针对缺失值统计项设置格式
如果不想修改missing_stat的写法,可以在生成表格后,定位到缺失值行统一调整格式:
data <- data.frame( group = c(rep("A", 50), rep("B", 9), rep(NA, 1)), height = c(rnorm(30, mean = 160, sd = 5), rnorm(30, mean = 170, sd = 6)), gender = c(rep("Male", 25), rep("Female", 34), rep(NA, 1)) ) tableT <- data %>% gtsummary::tbl_summary( type = list(all_continuous() ~ "continuous2", all_dichotomous() ~ "categorical"), statistic = list(all_continuous2() ~ "{mean} ({sd})", all_categorical() ~"{n} ({p}%)"), missing = "always", missing_text = "Missing", missing_stat = "{N_miss}/{N_obs} ({p_miss}%)", digits = list(all_categorical() ~ c(0, 2), all_continuous2() ~ c(2,2)), include = everything() ) %>% # 定位到标记为"Missing"的行,设置统计值保留两位小数 modify_fmt_fun( rows = label == "Missing", statistic = ~ style_number(.x, digits = 2) )
注意事项
- 你之前尝试的
digits参数写法有误,digits是针对变量的统计量设置小数位数,无法直接指定p_miss; - 第一种方法更直接,第二种方法适合需要批量调整缺失行格式的场景。
内容的提问来源于stack exchange,提问作者Susan M
相关产品推荐
相关产品推荐

