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

如何将多列类别变量转换为虚拟变量并统计选项出现次数

问题描述

我有一个包含多个类别的变量,受访者被要求选择他们的前3个选项。此处可选选项为A、B、C和D(实际数据库中可选选项多于4个)。现有数据代码如下:

`var1:choice1` <- c("A","B","C")
`var1:choice2` <- c("B","C","A")
`var1:choice3` <- c("C","D","B")
id=1:3
mydata <- data.frame(id,`var1:choice1`,`var1:choice2`,`var1:choice3`)

希望将这些选项转换为虚拟变量,统计每个选项的出现次数,预期结果如下:

var1.A var1.B var1.C var1.D
1      1      1      1      0
2      0      1      1      1
3      1      1      1      0

方法1:使用tidyverse工具链

通过数据重塑+虚拟变量生成的方式实现,适合处理大规模数据:

library(tidyverse)

# 将宽格式数据转为长格式,保留受访者id
long_data <- mydata %>%
  pivot_longer(cols = starts_with("var1:"), names_to = "choice_order", values_to = "option")

# 生成虚拟变量并按id汇总
result <- long_data %>%
  mutate(flag = 1) %>%
  pivot_wider(names_from = option, values_from = flag,
              names_prefix = "var1.", values_fill = 0) %>%
  select(-choice_order)

print(result)

方法2:使用base R实现

无需加载额外包,适合轻量数据处理:

# 自动提取所有可选选项(适配实际多选项场景)
all_options <- unique(unlist(mydata[, -1]))

# 初始化结果矩阵
result_matrix <- matrix(0, nrow = nrow(mydata), ncol = length(all_options))
colnames(result_matrix) <- paste0("var1.", all_options)

# 逐行标记受访者选择的选项
for(i in 1:nrow(mydata)){
  selected_opts <- mydata[i, -1]
  result_matrix[i, paste0("var1.", selected_opts)] <- 1
}

# 组合id与结果矩阵
result_df <- data.frame(id = mydata$id, result_matrix)
print(result_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 05:05:14