如何在R的gtsummary中删除行但保留频数统计?
问题描述
使用gtsummary包制作统计表格时,希望删除"Não Gestante"行但保留原有频数统计。尝试的过滤条件无效,修改变量名后触发报错:
原代码:
dados %>% select(ANO_OCORRENCIA, FAIXA_ETARIA, CS_RACA, ORIENT_SEX, IDENT_GEN, CAT_GEST) %>% tbl_summary(by = ANO_OCORRENCIA, digits = all_categorical() ~ c(0,1), label = list(FAIXA_ETARIA ~ "Faixa Etária", CS_RACA ~ "Raça/cor da pele**", ORIENT_SEX ~ "Orientação Sexual", IDENT_GEN ~ "Identidade de Gênero", CAT_GEST ~ "Gestantes")) %>% modify_spanning_header(all_stat_cols() ~ "**Ano de Ocorrência**") %>% add_overall() %>% modify_header(update = list( label ~ '**Características**', stat_0 ~ '**Total**<br>N = 4,251' )) %>% modify_table_body(~.x %>% dplyr::relocate(stat_0, .after = stat_6), filter, !(variable == "Gestantes" & label == "Não Gestante"))
遇到的问题:
!(variable == "Gestantes" & label == "Não Gestante")条件无效,因为variable列存储的是原始变量名而非设置的显示标签- 修改为
variable == "CS_GEST"时触发报错:
Error: An error occured in `add_overall()`, and overall statistics cannot be merged. Has the variable label changed since the original call of `tbl_summary()`?
解决方法
核心是使用**原始变量名CAT_GEST**指定过滤条件,并调整modify_table_body的语法逻辑:
修改后的完整代码:
dados %>% select(ANO_OCORRENCIA, FAIXA_ETARIA, CS_RACA, ORIENT_SEX, IDENT_GEN, CAT_GEST) %>% tbl_summary(by = ANO_OCORRENCIA, digits = all_categorical() ~ c(0,1), label = list(FAIXA_ETARIA ~ "Faixa Etária", CS_RACA ~ "Raça/cor da pele**", ORIENT_SEX ~ "Orientação Sexual", IDENT_GEN ~ "Identidade de Gênero", CAT_GEST ~ "Gestantes")) %>% modify_spanning_header(all_stat_cols() ~ "**Ano de Ocorrência**") %>% add_overall() %>% modify_header(update = list( label ~ '**Características**', stat_0 ~ '**Total**<br>N = 4,251' )) %>% modify_table_body( ~ .x %>% dplyr::relocate(stat_0, .after = stat_6) %>% dplyr::filter(!(variable == "CAT_GEST" & label == "Não Gestante")) )
关键说明:
- gtsummary的
variable列始终存储原始数据列名(此处为CAT_GEST),而非通过label=设置的显示名称 - 将
relocate和filter整合到同一个dplyr管道中,避免语法冲突 - 该修改仅过滤显示行,不会影响
tbl_summary阶段完成的频数统计计算
内容的提问来源于stack exchange,提问作者Lana Meijinhos
相关产品推荐
相关产品推荐

