R语言按分组变量统计分类变量频数并绘制对应直方图
R实现分类变量分组频数统计与绘图
前置准备
首先加载测试数据,修正列名匹配描述中的Var1、Var2:
test_df <- structure(list(`1` = c(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), `2` = c(3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2)), row.names = c(NA, -101L), class = c("tbl_df", "tbl", "data.frame")) # 重命名列 colnames(test_df) <- c("Var1", "Var2")
1. 生成分组频数表
基础R实现
直接用table()函数生成列联表,行对应Var2取值,列对应Var1取值,单元格为对应频次:
# 基础频数表,仅展示数据中存在的分类 freq_table <- table(Var2 = test_df$Var2, Var1 = test_df$Var1) freq_table
测试数据运行结果:
Var1 Var2 1 2 2 24 70 3 0 7
如果需要强制展示1、2、3所有分类水平(即使数据中没有出现、频次为0),先把两个变量转为因子并指定完整水平:
# 指定因子水平 test_df$Var1 <- factor(test_df$Var1, levels = c(1,2,3)) test_df$Var2 <- factor(test_df$Var2, levels = c(1,2,3)) # 生成完整频数表 freq_table_full <- table(Var2 = test_df$Var2, Var1 = test_df$Var1) freq_table_full
运行结果:
Var1 Var2 1 2 3 1 0 0 0 2 24 70 0 3 0 7 0
2. 绘制分组频数图
注意:分类变量的频数统计适合用分组柱状图,直方图默认用于连续变量分箱统计,这里用ggplot2实现需求:x轴为Var2的分类值,y轴为频数,同Var2分组下区分不同Var1的频数:
# 加载ggplot2,未安装先运行 install.packages("ggplot2") library(ggplot2) ggplot(test_df, aes(x = Var2, fill = Var1)) + geom_bar(position = position_dodge(preserve = "single"), width = 0.7) + labs( x = "Var2状态值", y = "频数", fill = "Var1状态值", title = "Var2分组下Var1各状态频数分布" ) + scale_y_continuous(expand = c(0,0)) + theme_bw()
参数说明:
position_dodge(preserve = "single"):保证同x轴位置的不同Var1柱子并列展示,且即使某分类频数为0也会保留对应柱子位置- 如果需要堆叠展示不同Var1的频数,把
geom_bar()的position参数改为position = "stack"即可 scale_y_continuous(expand = c(0,0)):让y轴从0开始,柱子底部和x轴无空隙- 运行后直接输出绘图结果,匹配要求的展示逻辑。
内容的提问来源于stack exchange,提问作者trailblazer_1
相关产品推荐
相关产品推荐

