如何用R的dplyr包计算每位设计师的商品平均价格?
解决方案
你已经用group_by完成了分组,接下来只需要在summarise()里直接计算平均价格就行,完全不用新增列或者额外数据框,一步到位:
1. 计算每位设计师的平均价格
# 分组并计算平均价格,na.rm=TRUE处理可能存在的缺失值 designer_avg_price <- bags_2 %>% group_by(designer_name) %>% summarise(avg_price = mean(price, na.rm = TRUE))
注意:看你提供的样本数据里,第一条的designer_name是" Blue Calla"(名称前多了空格),这种情况会导致同一个设计师被错误分成两组,建议先清理名称格式:
# 先加载stringr包处理字符串 library(stringr) # 清理设计师名称的前后空格 bags_2 <- bags_2 %>% mutate(designer_name = str_trim(designer_name))
2. 绘制平均价格图表
用ggplot2直接基于上面得到的designer_avg_price数据框绘图,比如做排序后的柱状图(避免杂乱):
library(ggplot2) ggplot(designer_avg_price, aes(x = reorder(designer_name, -avg_price), y = avg_price)) + geom_col(fill = "#2c3e50") + labs(title = "每位设计师纸样平均价格", x = "设计师名称", y = "平均价格") + theme(axis.text.x = element_text(angle = 45, hjust = 1)) # 旋转x轴标签防止重叠
如果设计师数量较多(152位),柱状图过于拥挤,也可以换成点图展示:
ggplot(designer_avg_price, aes(x = reorder(designer_name, avg_price), y = avg_price)) + geom_point(color = "#e74c3c", size = 2) + labs(title = "每位设计师纸样平均价格", x = "设计师名称", y = "平均价格") + theme(axis.text.x = element_text(angle = 90, hjust = 1))
整个流程都是管道化操作,没有多余的繁琐步骤,直接从原数据得到平均价格并完成可视化。
内容的提问来源于stack exchange,提问作者DivergentStitches
相关产品推荐
相关产品推荐

