You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含多选答案的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 12:50:17