R语言如何匹配指定关键词向量为data.frame新增标识列
R 实现数据框关键词匹配打标的方案
你可以直接通过R内置的正则匹配函数实现需求,不需要依赖第三方包,以下是可直接运行的实现代码:
方法1:推荐写法(大小写不敏感匹配,维护成本低)
不需要手动枚举关键词的所有大小写形式,直接开启正则的大小写忽略参数即可,后续新增关键词也只需要补充核心词:
# 加载示例数据 df <- structure(list(Name = c("Mark", "Joseph", "Lucas"), Achievement = c("Cyber Award", "Biology Award", "Co-author of 'New are of technology safety'")), class = "data.frame", row.names = c(NA, -3L)) # 定义核心匹配关键词,仅需写小写形式 core_keywords <- c("cyber", "technology", "computer") # 拼接为正则规则,| 代表匹配任意一个关键词 match_rule <- paste(core_keywords, collapse = "|") # 新增标识列,匹配成功返回1,失败返回0 df$`Cyber Achievement` <- as.integer( grepl(match_rule, df$Achievement, ignore.case = TRUE) )
运行后输出结果完全符合你的预期:
Name Achievement Cyber Achievement 1 Mark Cyber Award 1 2 Joseph Biology Award 0 3 Lucas Co-author of 'New are of technology safety' 1
方法2:使用你预定义的全量匹配向量
如果你需要严格使用你已经写好的包含大小写变体的my_vector做匹配,只需要替换匹配规则即可,不需要开启大小写忽略参数:
# 你预定义的待匹配向量 my_vector <- c("cyber", "Cyber", "technology", "Technology", "computer", "Computer") match_rule <- paste(my_vector, collapse = "|") df$`Cyber Achievement` <- as.integer(grepl(match_rule, df$Achievement))
该写法输出结果和方法1完全一致,但后续新增关键词需要手动补全所有大小写变体,维护成本更高,更推荐使用方法1。
代码说明
grepl()函数会逐行判断字符串是否命中匹配规则,返回逻辑值TRUE/FALSEas.integer()会把逻辑值直接转为1/0,刚好匹配你需要的打标规则- 列名带空格的时候,引用列名需要用反引号包裹,避免语法报错
内容的提问来源于stack exchange,提问作者Robbert
相关产品推荐
相关产品推荐

