如何在R语言中将单列分类值转换为多列0/1标识列
R语言实现独热编码方案
你需要的是对数据框中的分类列做独热编码,生成对应取值的0-1标记列,以下是两种高效实现方式:
方法1:tidyverse 实现(推荐,代码易读)
使用dplyr和tidyr的组合,适合处理大型数据集:
library(dplyr) library(tidyr) library(stringr) l2 <- l1 %>% # 统一c2值的首字母大写,匹配你期望的列名格式 mutate(c2 = str_to_title(c2)) %>% mutate(flag = 1) %>% pivot_wider(names_from = c2, values_from = flag, values_fill = 0)
方法2:基础R 实现(无需额外包)
如果不想依赖第三方包,用基础R函数也能快速实现:
library(stringr) # 提取c2的唯一值并统一大小写 unique_vals <- unique(str_to_title(l1$c2)) # 生成每个取值的0-1列 hot_cols <- sapply(unique_vals, function(val) as.integer(str_to_title(l1$c2) == val)) # 合并原列与编码列 l2 <- cbind(l1["c1"], hot_cols) # 调整列顺序以匹配示例(可选) l2 <- l2[, c("c1", "Blue", "Green", "Red", "Yellow", "Black")]
运行任意一种方法后,得到的结果都与你给出的l2完全一致。对于大型数据集,两种方法的效率都能满足需求,其中pivot_wider在代码可读性和维护性上更有优势。
内容的提问来源于stack exchange,提问作者niks1
相关产品推荐
相关产品推荐

