如何将多个二元变量合并为分类变量(适配ggplot绘图需求)
解决方案
1. 构建数据框
先把所有二元变量整合到一个数据框里,示例代码如下:
# 创建包含所有任务变量的数据框 task_data <- data.frame( Personal_Help = c(1,1,2,1,2,1), PR = c(2,1,1,2,1,2), Fundraising = c(1,2,1,2,2,1) # 在这里补充剩余7个任务变量 )
2. 转换为长格式并筛选有效记录
用tidyr和dplyr包把宽格式数据转成适合统计的长格式,同时只保留取值为1(代表“是”)的记录:
library(tidyr) library(dplyr) # 转长格式+筛选有效响应 long_data <- task_data %>% pivot_longer(cols = everything(), names_to = "Job_Task", # 分类变量名,直接用原任务名称 values_to = "Is_Included") %>% filter(Is_Included == 1) # 如果一定要用数字编码作为分类水平,可加以下步骤 long_data <- long_data %>% mutate(Job_Task_Code = case_when( Job_Task == "Personal_Help" ~ 1, Job_Task == "PR" ~ 2, Job_Task == "Fundraising" ~ 3, # 补充剩余任务的编码对应关系 TRUE ~ NA_integer_ ))
3. 用ggplot绘制统计图表
直接用整理好的长格式数据绘图,统计每个任务的受访者数量:
library(ggplot2) ggplot(long_data, aes(x = Job_Task)) + geom_bar(fill = "#4682B4") + labs(title = "各工作任务的受访者分布", x = "工作任务类型", y = "受访者人数") + theme(axis.text.x = element_text(angle = 45, hjust = 1)) # 旋转x轴标签避免重叠
核心优势
- 无需逐个写条件判断,自动批量处理所有任务变量
- 长格式是ggplot的标准输入格式,后续调整图表更灵活
- 保留原任务名称作为分类标签,图表可读性远高于数字编码
内容的提问来源于stack exchange,提问作者Jgl1000
相关产品推荐
相关产品推荐

