You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 11:13:18