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

如何在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占比(%)")  # 可选:添加坐标轴标签

代码解释

  1. filter(!is.na(value)):在数据变长后,直接过滤掉所有NA(即not applicable)的记录,确保后续统计的是每个变量的有效受访者数据。
  2. group_by(vars):按变量分组,分别计算每个变量的有效样本总数和Decreased的数量。
  3. mutate(pct = ...):用Decreased数量除以该变量的有效样本总数,得到符合要求的占比。

这样处理后,每个变量的占比计算完全基于自身的有效样本,不会受其他变量NA值的影响,完美匹配需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:33:26