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

在R中如何基于相同前缀的多列关键词批量生成对应哑变量?

R语言批量生成关键词哑变量方案

以下方案适配tidyverse语法风格,无需手动枚举K列和关键词,可直接批量生成所有符合要求的哑变量。


完整代码

# 加载依赖包
library(tidyverse)

# --------------------------
# 1. 构造示例数据(实际使用时替换为你自己的数据框)
document <- tibble(
  ID = 1:4,
  Name = c("Contract XYZ", "Agreement ABC", "Document 123", "Empty Space"),
  Year = c(2000,2003,2003,2004),
  K1 = c("transport", "pens", "elephants", "music"),
  K2 = c("elephants", "music", NA_character_, NA_character_),
  K50 = c(NA_character_, NA_character_, NA_character_, "transport")
)

# --------------------------
# 2. 提取所有K列的非空唯一关键词
all_keywords <- document %>%
  select(starts_with("K")) %>% # 自动匹配所有K开头的列
  unlist() %>% # 将所有K列的值打平为向量
  str_squish() %>% # 去除值前后的多余空格,避免匹配误差
  na.omit() %>% # 剔除空值
  unique() # 去重得到全量唯一关键词

# --------------------------
# 3. 批量生成所有关键词哑变量
document_dummies <- document %>%
  mutate(
    !!!map(set_names(all_keywords), function(keyword) {
      # 判断当前行任意K列是否包含目标关键词,是返回1,否则返回NA
      if_any(starts_with("K"), ~str_squish(.) == keyword) %>% 
        ifelse(1, NA_real_)
    })
  )

效果说明

针对示例数据生成的哑变量规则完全符合需求:

  • transport列:ID=1、4取值为1,其余为NA
  • elephants列:ID=1、3取值为1,其余为NA
  • pens列:ID=2取值为1,其余为NA
  • music列:ID=2、4取值为1,其余为NA

适配说明

  • 无需修改K列的数量、命名格式,starts_with("K")会自动匹配所有K开头的列,K1/K2/K_1/K_2格式均可识别
  • 自动适配关键词的新增/减少,无需手动维护词表
  • 已内置空格清洗逻辑,避免关键词前后多余空格导致的匹配错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:24:02