如何将含多选答案的R数据集转换为虚拟变量格式?
处理多选项列生成虚拟变量的方法
针对你的数据集(注意原代码中why_are_you_sad的元素数量与subjects不匹配,已先修正),可以用tidyverse工具包高效生成对应5个选项的虚拟变量,步骤如下:
1. 修正并准备数据集
首先调整数据集中的长度不匹配问题:
df <- data.frame(subjects = 1:12, Why_are_you_not_happy = c(1,2,"1,2,5",5,1,2,"3,4",3,2,"1,5",3,4), why_are_you_sad = c("1,2,3",1,2,3,"4,5,3",2,1,4,3,1,1) ) # 移除原代码中多余的最后一个"1"
2. 加载必要工具包
library(tidyverse)
3. 拆分多选项并生成虚拟变量
处理「不开心原因」列
将逗号分隔的选项拆分为多行,再转换为宽格式的虚拟变量(1代表选中该选项,0代表未选中):
happy_dummies <- df %>% select(subjects, Why_are_you_not_happy) %>% separate_rows(Why_are_you_not_happy, sep = ",") %>% # 强制包含1-5所有选项,避免无人选的选项被遗漏 mutate(Why_are_you_not_happy = factor(Why_are_you_not_happy, levels = 1:5)) %>% mutate(value = 1) %>% pivot_wider(names_from = Why_are_you_not_happy, values_from = value, names_prefix = "happy_", values_fill = 0)
处理「悲伤原因」列
用相同逻辑处理第二个问题列:
sad_dummies <- df %>% select(subjects, why_are_you_sad) %>% separate_rows(why_are_you_sad, sep = ",") %>% mutate(why_are_you_sad = factor(why_are_you_sad, levels = 1:5)) %>% mutate(value = 1) %>% pivot_wider(names_from = why_are_you_sad, values_from = value, names_prefix = "sad_", values_fill = 0)
4. 合并结果到最终数据集
将生成的虚拟变量与原受试者ID合并:
final_df <- df %>% select(subjects) %>% left_join(happy_dummies, by = "subjects") %>% left_join(sad_dummies, by = "subjects") # 查看最终结果 print(final_df)
运行后会得到包含happy_1至happy_5、sad_1至sad_5的虚拟变量列,完整对应每个问题的5个选项。
内容的提问来源于stack exchange,提问作者An116
相关产品推荐
相关产品推荐

