如何在tbl_summary行百分比模式下仅显示特定列的百分比?
问题描述
我已在tbl_summary()中设置按行计算百分比(percent = "row"),现需实现仅为特定列(变量)显示百分比的效果,请问应如何修改代码?当前使用的代码如下:
Table1234 %>% select(everything(), -c(screening_id, m07_mainsourceincome_c, m01_2_ageyears_q, r_sample)) %>% tbl_summary(by = "test_result", percent = "row", digits = NULL, label = list(age_group_10yrs ~ "Age Groups", m01_1_sex_d ~ "Sex", m05_qualificationmg_c ~ "Education", m06_indivemployment_c ~ "Profession", m06_indivemployment_currently_employed ~ "Employment Status")) %>% modify_column_hide(., columns = stat_1) %>% bold_labels() %>% add_p() %>% add_overall()
解决方案
要实现仅特定变量显示行百分比的效果,你可以用tbl_summary()的statistic参数,给目标变量单独定义带行百分比的统计格式,其他变量设置成只显示频数或者你需要的其他统计量。
修改后的代码示例
假设你想让Sex和Education这两个变量显示行百分比,剩下的变量只显示频数,修改后的代码如下:
Table1234 %>% select(everything(), -c(screening_id, m07_mainsourceincome_c, m01_2_ageyears_q, r_sample)) %>% tbl_summary(by = "test_result", percent = "row", # 保留行百分比的计算逻辑 digits = NULL, label = list(age_group_10yrs ~ "Age Groups", m01_1_sex_d ~ "Sex", m05_qualificationmg_c ~ "Education", m06_indivemployment_c ~ "Profession", m06_indivemployment_currently_employed ~ "Employment Status"), # 指定统计格式:默认分类变量只显示频数,目标变量加行百分比 statistic = list( all_categorical() ~ "{n}", m01_1_sex_d ~ "{n} ({p_row}%)", m05_qualificationmg_c ~ "{n} ({p_row}%)" )) %>% modify_column_hide(columns = stat_1) %>% bold_labels() %>% add_p() %>% add_overall()
注意事项
{p_row}%会沿用你设置的percent = "row"规则计算行百分比,不用额外调整计算逻辑。- 如果是数值型变量,你可以用
all_continuous()来统一设置显示格式,再针对特定变量单独覆盖。 - 要是你说的“特定列”是指分组后的某一列(比如test_result的某个水平列),可以用
modify_table_body()筛选目标列后修改统计格式,但这种场景比较少见,一般上面的变量级控制更贴合需求。
内容的提问来源于stack exchange,提问作者Fliegendes Klassenzimmer
相关产品推荐
相关产品推荐

