如何在R中合并行并重塑数据框以绘制堆叠条形图
解决R数据框转宽格式问题(适配堆叠条形图)
你当前代码生成的是长格式数据(gender、prize_type、计数),要转成你需要的宽格式(gender、book、career作为列),得用tidyr包的pivot_wider()函数——之前用filter行不通是因为filter是用来筛选行的,没法实现列格式转换。
完整修正代码:
library(tidyverse) # 确保加载dplyr和tidyr工具包 # 第一步:生成带命名计数列的分组统计,同时取消分组避免后续干扰 prize_type_per_gender <- literary_cleaned %>% group_by(gender, prize_type) %>% summarize(count = n(), .groups = "drop") # 给计数列命名为count,.groups="drop"清理分组标记 # 第二步:将长格式转成目标宽格式 prize_wide <- prize_type_per_gender %>% pivot_wider( names_from = prize_type, # 用prize_type的取值(book/career)作为新列名 values_from = count, # 用count列的数值填充新列 values_fill = 0 # 若某个gender无对应奖项,用0填充避免出现NA )
结果说明:
运行后prize_wide的结构完全符合你的需求:
- 第一列是
gender(字符型) - 后续列为
book和career(数值型,对应各性别两类奖项的数量)
堆叠条形图快速示例(可选):
用转换后的宽表直接绘图的话,可参考ggplot代码:
ggplot(prize_wide, aes(x = gender)) + geom_col(aes(y = book, fill = "书籍类奖项"), position = "stack") + geom_col(aes(y = career, fill = "职业类奖项"), position = "stack") + labs(x = "性别", y = "获奖数量", fill = "奖项类型")
内容的提问来源于stack exchange,提问作者JMII
相关产品推荐
相关产品推荐

