R语言如何基于数据框分类列唯一值自动生成独热编码列
R语言分类列自动生成指定格式独热编码实现方案
以下三种实现方式均可以满足需求,无需手动拼接列名,输出结果与你给出的预期格式完全一致:
方案1:使用fastDummies包(最简方案)
专门处理独热编码的第三方包,默认生成的列名规则刚好匹配你要的「原列名_取值」格式:
# 首次使用先安装包 install.packages("fastDummies") library(fastDummies) # 构造样例测试数据(你可以替换成自己的数据集) df <- data.frame( Organic = c("Yes", "Yes", "No"), StoreBrand = c("No", "Yes", "No") ) # 生成独热编码,remove_selected_columns设为FALSE保留原始列 df_result <- dummy_cols( .data = df, select_columns = c("Organic", "StoreBrand"), remove_selected_columns = FALSE )
方案2:tidyverse原生实现
适合已经在使用tidyverse技术栈、不想额外安装其他包的场景:
library(tidyverse) df <- data.frame( Organic = c("Yes", "Yes", "No"), StoreBrand = c("No", "Yes", "No") ) df_result <- df %>% mutate(rown = row_number()) %>% pivot_longer(c(Organic, StoreBrand), names_to = "col_name", values_to = "col_val") %>% mutate(new_col = paste0(col_name, "_", col_val), flag = 1) %>% pivot_wider(names_from = new_col, values_from = flag, values_fill = 0) %>% select(-rown, -col_name, -col_val)
方案3:基础R实现(无需安装任何包)
纯基础R语法实现,不需要依赖任何第三方包:
# 构造样例数据 df <- data.frame( Organic = c("Yes", "Yes", "No"), StoreBrand = c("No", "Yes", "No") ) # 指定要处理的分类列 target_cols <- c("Organic", "StoreBrand") for (col in target_cols) { vals <- unique(df[[col]]) for (v in vals) { new_col_name <- paste0(col, "_", v) df[[new_col_name]] <- as.integer(df[[col]] == v) } } # 运行完成后df即为目标结果
内容的提问来源于stack exchange,提问作者Debasmita Das
相关产品推荐
相关产品推荐

