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

如何将调查问卷的勾选式答案转换为分类变量

解决多选问卷选项转分类编码问题

你的问题出在对每行单独生成因子,unique(x)在每行只有单个选项时只会返回当前选项,所以每个行的因子水平只有一个,转成数值后都是1,自然得不到预期的多编码结果。

正确的思路是先建立全局的选项-编码映射,再对每个包含多个选项的字符串拆分、匹配编码,最后合并成所需格式。

步骤1:定义全局选项编码映射

先把所有可能的选项和对应的编码一一对应,确保所有选项都被覆盖:

# 创建选项到编码的映射向量
code_map <- c(
  "Sun/Solar Photovoltaic" = 1,
  "Wind Power" = 2,
  "Hydel" = 3,
  "Biomass" = 4,
  "Geothermal" = 5,
  "Food crops" = 6,
  "I do not know Renewable Energy Sources" = 7
)

步骤2:构造模拟的多选项数据集(对应你的真实数据)

你的示例数据是单个选项,但实际是多选(逗号分隔),这里构造符合场景的测试数据:

data <- data.frame(
  ID = 1:2,
  CIQ_RES_choice = c(
    "Sun/Solar Photovoltaic, Wind Power",
    "Wind Power, Hydel"
  ),
  stringsAsFactors = FALSE
)

步骤3:处理每个选项字符串,生成分类编码

用strsplit拆分逗号分隔的选项,再通过映射表匹配编码,最后合并成逗号分隔的字符串:

# 处理函数:拆分选项→匹配编码→合并
get_codes <- function(choice_str) {
  # 拆分选项,同时去除前后空格
  choices <- trimws(strsplit(choice_str, ",")[[1]])
  # 匹配编码
  codes <- code_map[choices]
  # 合并成逗号分隔的字符串
  paste(codes, collapse = ", ")
}

# 应用到数据框,生成分类编码列
data$分类编码 <- sapply(data$CIQ_RES_choice, get_codes)

最终结果

运行后得到的数据框就是你需要的格式:

> data
  ID                          CIQ_RES_choice 分类编码
1  1 Sun/Solar Photovoltaic, Wind Power  1, 2
2  2              Wind Power, Hydel        2, 3

补充说明

  • 如果你的真实数据中选项有大小写不一致、额外空格的情况,可以先统一处理(比如转小写、去除多余空格),避免匹配失败。
  • 如果有未在映射表中的选项,可以在get_codes函数里添加判断,比如返回NA或者自定义编码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 01:43:10