使用gtsummary处理含空值耐药标记数据时的列删除与重命名问题
gtsummary处理含空值耐药标记数据时的列删除与重命名问题
看起来你在用gtsummary制作微生物和耐药标记的汇总表时,被空值对应的****列给难住了,我来帮你一步步解决这两个问题:
问题1:删除****列(无耐药标记的分组)
这个列对应的是Resistance.markers字段为空值的观测,有两种简单的处理思路:
方式一:提前过滤空值数据
在数据筛选阶段直接排除空值观测,这样后续制表就不会出现这个分组了:
GNRs_resistance %>% filter(Organism %in% gramnegativerods, !is.na(Resistance.markers), # 排除NA值 Resistance.markers != "") # 排除空字符串 tbl_summary(include= c(Organism, Resistance.markers), by = Resistance.markers, statistic = Organism ~ "{n} ({p}%)") %>% add_overall() %>% modify_header(all_stat_cols() ~ "**{level}**<br>n = {n}")
方式二:在gtsummary中直接隐藏列
如果不想改动原始数据的筛选逻辑,也可以用modify_column_hide隐藏这个空值对应的列。你可以先运行到tbl_summary步骤后,用names()查看生成的列名,再指定要隐藏的列(比如空值分组对应的列是stat_0):
GNRs_resistance %>% filter(Organism %in% gramnegativerods) %>% tbl_summary(include= c(Organism, Resistance.markers), by = Resistance.markers, statistic = Organism ~ "{n} ({p}%)") %>% add_overall() %>% modify_header(all_stat_cols() ~ "**{level}**<br>n = {n}") %>% modify_column_hide(columns = stat_0) # 替换成实际对应的空值列名
问题2:将****列重命名为“Nil detected”
直接用modify_header(**** = "**Nil detected**")没生效,是因为这个列对应的分组{level}是空值,gtsummary无法识别你写的****。最直观的解决方式是先把数据里的空值替换成“Nil detected”,再制表:
GNRs_resistance %>% filter(Organism %in% gramnegativerods) %>% # 把空值和NA统一替换为"Nil detected" mutate(Resistance.markers = case_when( is.na(Resistance.markers) | Resistance.markers == "" ~ "Nil detected", TRUE ~ Resistance.markers )) %>% tbl_summary(include= c(Organism, Resistance.markers), by = Resistance.markers, statistic = Organism ~ "{n} ({p}%)") %>% add_overall() %>% modify_header(all_stat_cols() ~ "**{level}**<br>n = {n}")
这样生成的表中,原本的****列就会自动显示为“Nil detected”,不需要额外修改表头。
备注:内容来源于stack exchange,提问作者Stuart Drazich-Taylor
相关产品推荐
相关产品推荐

