使用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
相关产品推荐
相关产品推荐

