按季度分组统计列唯一值出现次数并绘制柱状图求助
正确实现方法
一、数据分组统计
你的第一段代码思路没问题,只是输出方式和列名匹配上有问题,修正后即可得到规范的统计结果:
通用季度分组统计(dplyr实现)
# 先加载dplyr包,未安装则先运行 install.packages("dplyr") library(dplyr) # 按季度、产品分组统计出现次数,注意列名要和原数据集一致(原数据是Product,不是product) df_summary <- dmv %>% group_by(quarter, Product) %>% summarize(count = n(), .groups = "drop") # .groups="drop"取消分组状态,方便后续处理 # 直接查看统计结果 print(df_summary)
如果只需要统计单个季度(比如Q1)并取Top10产品:
# 筛选Q1数据,统计产品出现次数并取前10 df_q1_top10 <- dmv %>% filter(quarter == 1) %>% group_by(Product) %>% summarize(count = n(), .groups = "drop") %>% arrange(desc(count)) %>% slice_head(n = 10)
二、绘制柱状图
推荐用ggplot2包绘制,比基础绘图更灵活美观:
全季度分组柱状图(各季度产品计数并列展示)
# 加载ggplot2包,未安装则先运行 install.packages("ggplot2") library(ggplot2) ggplot(df_summary, aes(x = Product, y = count, fill = factor(quarter))) + geom_bar(stat = "identity", position = "dodge") + # 生成并列柱状图 labs(title = "各季度产品出现次数统计", x = "产品", y = "出现次数", fill = "季度") + theme(axis.text.x = element_text(angle = 45, hjust = 1)) # 旋转X轴标签,避免重叠
单季度Top10产品柱状图
ggplot(df_q1_top10, aes(x = reorder(Product, -count), y = count)) + # 按计数降序排列产品 geom_bar(stat = "identity", fill = "#2E8B57") + labs(title = "Q1出现次数Top10产品", x = "产品", y = "出现次数") + theme(axis.text.x = element_text(angle = 45, hjust = 1))
原代码问题说明
- 第一段代码:
table(df_raw)不适合展示分组统计后的DataFrame,直接打印df_raw即可;另外列名大小写要和原数据集匹配(原数据是Product,代码里写成了product)。 - 第二段代码:存在列名错误(
product_name应为Product),且用hist()绘制分类数据的柱状图是错误的,hist()用于绘制数值型数据的直方图,分类数据应使用柱状图工具。
内容的提问来源于stack exchange,提问作者Chaitanya Chitturi
相关产品推荐
相关产品推荐

