如何基于含缺失值的DataFrame绘制排除缺失行的均值柱状图
解决方法
方法一:使用tidyverse工具链(dplyr + ggplot2)
这是R中数据处理和可视化的常用组合,代码可读性高且灵活:
- 加载所需包
library(dplyr) library(ggplot2) library(tidyr)
- 还原你的数据集
df <- structure(list(id = c("id1", "test", "rew", "ewt"), total_frq_1 = c(54, 87, 10, 36), total_frq_2 = c(45, 24, 202, 43), total_frq_3 = c(24, NA, 25, 8), total_frq_4 = c(36, NA, 104, NA)), row.names = c(NA, 4L), class = "data.frame")
- 计算各列均值(自动排除缺失值)
先剔除id列,再批量计算每列的均值,最后把宽格式数据转为长格式(适配ggplot2的绘图逻辑):
mean_stats <- df %>% select(-id) %>% summarise(across(everything(), ~mean(., na.rm = TRUE))) %>% pivot_longer(cols = everything(), names_to = "列名", values_to = "均值")
- 绘制柱状图
ggplot(mean_stats, aes(x = 列名, y = 均值)) + geom_col(fill = "#4A90E2") + labs(title = "各列均值柱状图", x = "数据列", y = "均值") + theme_bw()
方法二:基础R实现
如果不想加载额外包,用基础R也能完成:
- 计算各列均值
直接用colMeans函数,na.rm = TRUE参数会自动忽略缺失值:
col_means <- colMeans(df[, -1], na.rm = TRUE)
- 绘制柱状图
用基础R的barplot函数:
barplot(col_means, names.arg = names(col_means), main = "各列均值柱状图", xlab = "数据列", ylab = "均值", col = "#4A90E2")
两种方法计算出的结果完全符合要求:比如total_frq_3的均值为19,total_frq_4的均值为70。
内容的提问来源于stack exchange,提问作者Erik Brole
相关产品推荐
相关产品推荐

