R语言依据关键词列表创建0/1标记变量并匹配字符串的技术问询
R 自定义关键词批量标记人工备注字段实现方案
核心适配所有需求:仅修改关键词列表即可重新运行、大小写不敏感、无需分隔符的子串匹配、支持关键词末尾漏写字符的模糊匹配,无需拆分备注词汇生成多余变量。
完整实现代码(tidyverse 版本,可读性更高)
# 加载依赖包 library(dplyr) library(purrr) # -------------------------- 仅需修改以下配置项即可重新运行 -------------------------- # 自定义需要匹配的关键词列表 target_keywords <- c("abc", "xyz", "flights") # 允许关键词末尾最多漏写的字符数,不需要模糊匹配后缀时设为0 allowed_missing_suffix_len <- 1 # -------------------------------------------------------------------------------- # 自动生成每个关键词的匹配规则 match_rules <- map_chr(target_keywords, function(key) { substr(key, 1, nchar(key) - allowed_missing_suffix_len) }) # 批量生成标记列 result_df <- df %>% bind_cols( map_dfc(set_names(match_rules, target_keywords), function(pattern) { as.integer(grepl(pattern, Notes, ignore.case = TRUE)) }) )
基础R版本(无需安装第三方包)
# -------------------------- 仅需修改以下配置项即可重新运行 -------------------------- target_keywords <- c("abc", "xyz", "flights") allowed_missing_suffix_len <- 1 # -------------------------------------------------------------------------------- match_rules <- sapply(target_keywords, function(key) { substr(key, 1, nchar(key) - allowed_missing_suffix_len) }) result_df <- df for (i in seq_along(target_keywords)) { result_df[[target_keywords[i]]] <- as.integer( grepl(match_rules[i], result_df$Notes, ignore.case = TRUE) ) }
匹配逻辑说明
- 子串匹配:无需备注中的关键词前后有空格等分隔符,只要包含对应字符片段即可命中,适配
ABCschedule这类无分隔符的录入场景 - 大小写不敏感:通过
grepl的ignore.case = TRUE实现,ABC、abc、Abc都会命中关键词abc - 后缀模糊匹配:通过截取关键词前面的固定长度字符匹配,比如关键词
flights配置允许漏写1个末尾字符时,flights、flight都会命中 - 关键词迭代:新增、删除、修改关键词仅需调整
target_keywords列表,其余代码无需改动 - 输出的标记列为1表示命中对应关键词,0表示未命中,完全符合给定的期望输出格式
内容的提问来源于stack exchange,提问作者ks54
相关产品推荐
相关产品推荐

