在R中按年和月分组统计多列NA值并绘制柱状图
R语言按年月分组统计多列缺失值并可视化
步骤1:加载依赖包
我们会用到dplyr做数据处理、lubridate处理日期、ggplot2绘图,先加载这些包:
library(dplyr) library(lubridate) library(ggplot2)
步骤2:预处理日期数据
先把Date列转换为标准日期格式,再提取年份和月份(用月份缩写更易读):
b <- b %>% mutate(Date = ymd(Date), Year = year(Date), Month = month(Date, label = TRUE, abbr = TRUE))
步骤3:按年月分组统计缺失值
用group_by按年、月分组,再通过across批量统计每列的NA数量:
# 生成宽格式统计表格 na_stats <- b %>% group_by(Year, Month) %>% summarise(across(AAA:EEE, ~sum(is.na(.)), .names = "NA_{.col}")) # 查看结果 print(na_stats)
输出的na_stats就是你需要的统计表格,每行对应一个年月,每列对应原数据列的缺失值数量。
步骤4:转换数据格式(用于绘图)
把宽格式数据转为长格式,方便后续绘制分组柱状图:
na_stats_long <- na_stats %>% pivot_longer(cols = starts_with("NA_"), names_to = "Variable", values_to = "NA_Count", names_prefix = "NA_")
步骤5:绘制缺失值统计柱状图
用ggplot2绘制分面柱状图,清晰展示每个年月各变量的缺失值情况:
ggplot(na_stats_long, aes(x = Variable, y = NA_Count, fill = Variable)) + geom_col(position = "dodge") + facet_wrap(~paste(Year, Month, sep = "-")) + labs(title = "各变量每月缺失值数量统计", x = "变量", y = "缺失值数量") + theme_minimal() + theme(axis.text.x = element_text(angle = 45, hjust = 1))
示例输出说明
针对你提供的示例数据,统计结果会显示1999年12月各变量的NA数:
- AAA:3个
- BBB:0个
- CCC:1个
- DDD:1个
- EEE:0个
内容的提问来源于stack exchange,提问作者Marcel
相关产品推荐
相关产品推荐

