在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,其余为NAelephants列:ID=1、3取值为1,其余为NApens列:ID=2取值为1,其余为NAmusic列:ID=2、4取值为1,其余为NA
适配说明
- 无需修改K列的数量、命名格式,
starts_with("K")会自动匹配所有K开头的列,K1/K2/K_1/K_2格式均可识别 - 自动适配关键词的新增/减少,无需手动维护词表
- 已内置空格清洗逻辑,避免关键词前后多余空格导致的匹配错误
内容的提问来源于stack exchange,提问作者surfmoe
相关产品推荐
相关产品推荐

