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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:54:05