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

R语言中基于字符串变量创建虚拟变量的实现方法

R语言分类列转虚拟变量实现方案

首先提个前置注意点:你初始用cbind(people, colors)生成的对象是字符型矩阵,不是标准数据框,所有操作前建议先转成data.frame,避免后续出现类型异常。


方法1:基础R原生实现(零依赖)

不用安装任何第三方包,直接用内置的model.matrix函数生成虚拟变量即可,代码如下:

# 转换为标准数据框
df <- as.data.frame(cbind(people, colors), stringsAsFactors = FALSE)

# 生成无截距项的虚拟变量矩阵
dummy_vars <- model.matrix(~ colors - 1, data = df)
# 清理列名,去掉自动生成的"colors"前缀
colnames(dummy_vars) <- sub("^colors", "", colnames(dummy_vars))

# 拼接原people列得到最终结果
df_dummies <- cbind(people = df$people, as.data.frame(dummy_vars))

运行结果和你手动构造的示例完全一致,每个分类列的取值为0/1,对应行是否属于该分类。


方法2:tidyverse 生态实现(适配日常数据清洗流程)

如果你平时用dplyr/tidyr做数据处理,可以用宽表转换的逻辑生成虚拟变量,不需要手动调整列名:

library(dplyr)
library(tidyr)

df_dummies <- df |> 
  as.data.frame(stringsAsFactors = FALSE) |> 
  mutate(flag = 1) |> 
  pivot_wider(
    names_from = colors, 
    values_from = flag, 
    values_fill = 0
  )

这个写法会自动把colors列的所有唯一值作为新列名,没有对应分类的行自动填充0,代码可读性很高。


方法3:fastDummies 包实现(适合大数据量场景)

如果你的数据集行数很高,追求运行效率,可以用专门做虚拟变量生成的fastDummies包,一行代码完成全流程:

# 首次使用请先运行安装:install.packages("fastDummies")
library(fastDummies)

df_dummies <- df |> 
  as.data.frame(stringsAsFactors = FALSE) |> 
  dummy_cols(
    select_columns = "colors",
    remove_selected_columns = TRUE
  )

这个方法运行速度远快于前两种,百万行级数据也能秒出结果,生成的列名规范,不需要额外清理。

以上三种方法都可以自动适配colors列的所有分类取值,哪怕后续新增其他颜色分类,也不需要修改代码,比手动给每个颜色写向量赋值的方式通用性强很多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:48:36