gtsummary如何隐藏指定行N值并按变量配置缺失值显示规则
gtsummary tbl_summary 两个常见问题解决方案
问题1:指定Test~Test7行不显示N值,其余变量保留N值
原代码不生效有三个核心原因:
statistic参数的匹配规则是按列表顺序从上到下生效,把通用选择器all_categorical()写在Test系列变量的前面,会导致后面Test系列的自定义规则被覆盖- 给Test系列设置空字符串
" "会导致统计列完全空白,正确写法是直接写入需要展示的统计量即可 - 末尾的
add_n()默认对所有变量生效,会在变量名旁统一添加N值,需要通过参数指定排除不需要显示N的变量
修正后可运行代码:
base %>% tbl_summary( include = all_of(var_interet), statistic = list( # 注意:单变量自定义规则必须放在通用选择器前面 Test ~ "{p}%", Test2 ~ "{p}%", Test3 ~ "{p}%", Test4 ~ "{p}%", Test5 ~ "{p}%", Test6 ~ "{p}%", Test7 ~ "{p}%", all_categorical() ~ "{n} ({p}%)" ), digits = list( all_categorical() ~ c(0, 1) ), type = list( Q1_oui_systematique ~ "dichotomous", Q1_non_temps ~ "dichotomous", Q1_non_outils ~ "dichotomous", Q1_non_aise ~ "dichotomous", Q1_non_necessaire ~ "dichotomous", Q1_non_autre ~ "dichotomous" ), sort = c(ID_type_centre, ID_repondant,presence_tiers1, Q1_oui_systematique, Q2_oui_mod_decouverte, Q4) ~ "frequency", missing = "no" ) %>% bold_labels() %>% italicize_levels() %>% modify_spanning_header(all_stat_cols() ~ "**Ps**") %>% # 排除Test系列变量,这些行不会显示N值 add_n(include = -all_of(c("Test", "Test2", "Test3", "Test4", "Test5", "Test6", "Test7")))
问题2:按单个变量独立配置缺失值显示规则
gtsummary的missing参数本身是全局配置,要实现单变量独立控制,不用修改原始数据的最简方案是:全局先设置missing = "ifany",再通过modify_table_styling()隐藏指定变量对应的缺失值行即可。
示例代码:
# 定义不需要显示缺失值的变量名向量(即无作答权限、不需要展示缺失的题项) no_show_miss_vars <- c("Q1_oui_systematique", "Q1_non_temps", "Q1_non_outils", "Q1_non_aise", "Q1_non_necessaire", "Q1_non_autre") base %>% tbl_summary( include = all_of(var_interet), statistic = list( Test ~ "{p}%", Test2 ~ "{p}%", Test3 ~ "{p}%", Test4 ~ "{p}%", Test5 ~ "{p}%", Test6 ~ "{p}%", Test7 ~ "{p}%", all_categorical() ~ "{n} ({p}%)" ), digits = list(all_categorical() ~ c(0, 1)), type = list( Q1_oui_systematique ~ "dichotomous", Q1_non_temps ~ "dichotomous", Q1_non_outils ~ "dichotomous", Q1_non_aise ~ "dichotomous", Q1_non_necessaire ~ "dichotomous", Q1_non_autre ~ "dichotomous" ), sort = c(ID_type_centre, ID_repondant,presence_tiers1, Q1_oui_systematique, Q2_oui_mod_decouverte, Q4) ~ "frequency", # 全局开启缺失值按需显示 missing = "ifany" ) %>% bold_labels() %>% italicize_levels() %>% modify_spanning_header(all_stat_cols() ~ "**Ps**") %>% add_n(include = -all_of(c("Test", "Test2", "Test3", "Test4", "Test5", "Test6", "Test7"))) %>% # 隐藏指定变量的缺失值行 modify_table_styling( columns = all_stat_cols(), rows = variable %in% no_show_miss_vars & label %in% c("Unknown", "缺失"), hide = TRUE )
注意:如果运行后发现目标缺失行没有被隐藏,可以先运行
as_tibble(生成的表格对象)查看内部数据,确认缺失行对应的label字段实际内容,替换代码中匹配的字符即可。
内容的提问来源于stack exchange,提问作者maelle
相关产品推荐
相关产品推荐

