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

如何在R中将多选题响应转为one-hot encoding?附Excel替代方案

用R实现多选题数据的One-Hot编码(附Excel简易方案)

R实现步骤

1. 安装并加载所需包

先安装读取Excel和数据处理的工具包:

install.packages(c("readxl", "tidyr", "dplyr"))
library(readxl)
library(tidyr)
library(dplyr)

2. 读取Excel数据

假设你的Excel文件名为remote_learning_survey.xlsx,数据位于第一个工作表:

df <- read_excel("remote_learning_survey.xlsx", sheet = 1)

可通过colnames(df)查看数据列名,确保后续引用的多选题响应列名正确。

3. 拆分选项并生成One-Hot编码

假设存储多选题响应的列名为远程学习的最佳方面?(替换为你实际的列名):

# 定义选项编号与名称的对应关系
option_mapping <- tibble(
  option_id = 1:15,
  option_name = c(
    "灵活性", "可访问性", "时间安排", "模块质量", "学习资源",
    "课前准备", "面授环节质量", "面授次数", "辅导质量", "辅导频次",
    "导师支持质量", "导师支持频次", "项目的包容性方法(惠及所有性别学习者)",
    "项目对个人信心与自我提升的影响", "项目对教学技能提升的影响"
  )
)

# 拆分单元格内的选项,转换为长格式后生成one-hot编码
one_hot_df <- df %>%
  # 拆分逗号分隔的选项编号为单独行
  separate_rows(`远程学习的最佳方面?`, sep = ",") %>%
  # 去除编号前后空格并转为数值型
  mutate(`远程学习的最佳方面?` = as.integer(trimws(`远程学习的最佳方面?`))) %>%
  # 关联选项名称
  left_join(option_mapping, by = c("远程学习的最佳方面?" = "option_id")) %>%
  # 标记选中状态为1
  mutate(selected = 1) %>%
  # 转换为宽格式(one-hot),未选中项填充0,保留原始其他列
  pivot_wider(
    names_from = option_name,
    values_from = selected,
    values_fill = 0,
    id_cols = setdiff(colnames(df), "远程学习的最佳方面?")
  )

4. 查看结果

运行head(one_hot_df)即可看到转换后的one-hot编码数据:每个选项对应一列,1表示该选项被选中,0表示未选中。


Excel简易替代方案(适合小数据集)

如果你暂时不想用R,可尝试以下低效率但易操作的步骤(仅适合数据量小的情况):

  1. 拆分选项:选中响应列,用TEXTSPLIT函数拆分逗号分隔的内容到多列,例如=TEXTSPLIT(A2, ",")。
  2. 设置选项表头:在空白区域列出所有15个选项名称作为列标题。
  3. 标记选中状态:对每个选项列,用COUNTIF判断是否被选中,例如=IF(COUNTIF($B2:$Z2, "1"), 1, 0)(替换"1"为对应选项编号,$B2:$Z2为拆分后的列范围)。
  4. 批量填充:将公式复制到所有行和选项列,即可得到one-hot编码结果。

内容的提问来源于stack exchange,提问作者andrew

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 11:01:07