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

使用tbl_summary按性别分组时,如何排除无回答分类?

问题解决:排除tbl_summary表格中无数据的“No Answer”分组

问题场景

使用tbl_summary按性别(qa3_gender)生成分组统计表时,表格会显示男性、女性和“No Answer”三类,但“No Answer”分组无任何参与者(全为0),想要将该分组从表格中移除。尝试过滤数据后表格输出无变化。

数据示例

# A tibble: 321 × 2
   poverty            Gender
   <fct>              <fct> 
 1 Below Poverty Line Female
 2 Below Poverty Line Female
 3 Above              Female
 4 Below Poverty Line Female
 5 Above              Female
 6 Below Poverty Line Male  
 7 Above              Female
 8 Above              Female
 9 Above              Female
10 Above              Female
# ℹ 311 more rows

现有代码

testable1 <- nosingleparent %>% 
  select(qa3_gender, imp_race, qopmpov)
testable1 %>% 
  tbl_summary(by = qa3_gender) %>%
  modify_spanning_header(c("stat_1", "stat_2") ~ "**Gender**") %>%
  add_overall() %>%
  add_n() %>%
  modify_caption("**Table 3. Non-Single Parents in Study**") %>%
  modify_footnote(
    all_stat_cols() ~ "1 = Male and 2 = Female"
  ) 

无效的尝试代码

testable1 <- nosingleparent %>%
  filter(qa3_gender != "No Answer") %>%
  select(qa3_gender, imp_race, qopmpov)

解决方案

问题根源是qa3_gender为因子类型,即便过滤掉对应行,因子的水平(levels)仍保留“No Answer”,因此tbl_summary依然会显示该分组。以下两种方法可解决:

方法1:过滤后移除无数据的因子水平

在过滤数据后,用fct_drop()清除没有对应数据的因子水平:

testable1 <- nosingleparent %>%
  filter(qa3_gender != "No Answer") %>%
  mutate(qa3_gender = fct_drop(qa3_gender)) %>% # 移除无数据的因子水平
  select(qa3_gender, imp_race, qopmpov)

# 执行原表格生成代码
testable1 %>% 
  tbl_summary(by = qa3_gender) %>%
  modify_spanning_header(c("stat_1", "stat_2") ~ "**Gender**") %>%
  add_overall() %>%
  add_n() %>%
  modify_caption("**Table 3. Non-Single Parents in Study**") %>%
  modify_footnote(
    all_stat_cols() ~ "1 = Male and 2 = Female"
  ) 

方法2:在tbl_summary中直接指定保留的分组

无需修改原始数据,在tbl_summary的by参数中通过factor()手动指定需要保留的因子水平:

testable1 %>% 
  tbl_summary(by = factor(qa3_gender, levels = c("Male", "Female"))) %>% # 仅保留目标分组
  modify_spanning_header(c("stat_1", "stat_2") ~ "**Gender**") %>%
  add_overall() %>%
  add_n() %>%
  modify_caption("**Table 3. Non-Single Parents in Study**") %>%
  modify_footnote(
    all_stat_cols() ~ "1 = Male and 2 = Female"
  ) 

若不确定具体因子水平名称,可先通过levels(nosingleparent$qa3_gender)查看全部水平,再选择需要保留的部分。

内容的提问来源于stack exchange,提问作者manateemanatee77

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 08:32:50