如何在ggplot中针对特定变量排除缺失值绘制Decreased柱状图
问题解决方案
核心需求
绘制仅展示"Decreased"选项占比的柱状图,要求每个变量的占比基于自身有效样本量(排除"not applicable"对应的NA值,不计入该变量的总样本数),不能用全局na.omit()删除所有含NA的行(会导致各变量样本量失真)。
原代码问题
原代码在统计时未排除NA值,导致sum(n)包含了"not applicable"的样本,计算出的占比是Decreased占所有样本(含NA)的比例,不符合需求。
修改后的代码
# 选择目标变量 df <- select(dataset, variable1, variable2, variable3, variable4, variable5, variable6, variable7) # 数据处理:先排除NA,再统计每个变量的Decreased占比 df2 <- df %>% pivot_longer(everything(), names_to = "vars", values_to = "value") %>% filter(!is.na(value)) %>% # 关键步骤:过滤掉not applicable的NA记录 group_by(vars) %>% summarise( decreased_count = sum(value == "Decreased"), valid_total = n() # 每个变量的有效样本数(已排除NA) ) %>% mutate(pct = (decreased_count / valid_total) * 100) %>% ungroup() # 绘制柱状图 plot <- df2 %>% ggplot() + geom_col(aes(x = vars, y = pct), fill = "black") + labs(x = "变量", y = "Decreased占比(%)") # 可选:添加坐标轴标签
代码解释
filter(!is.na(value)):在数据变长后,直接过滤掉所有NA(即not applicable)的记录,确保后续统计的是每个变量的有效受访者数据。group_by(vars):按变量分组,分别计算每个变量的有效样本总数和Decreased的数量。mutate(pct = ...):用Decreased数量除以该变量的有效样本总数,得到符合要求的占比。
这样处理后,每个变量的占比计算完全基于自身的有效样本,不会受其他变量NA值的影响,完美匹配需求。
内容的提问来源于stack exchange,提问作者ph_researcher
相关产品推荐
相关产品推荐

