R语言多关键词匹配时高效生成合并标签列的方法问询
批量检测关键词并生成标签列的简便方法
不用手动写大量mutate和if语句,直接用批量处理的方式搞定,两种方案任你选:
方案一:用dplyr的across批量生成检测列后拼接
library(dplyr) library(stringr) # 原始数据 df <- data.frame( text = c("the discrepency between the two items are great", "there is discrepency between the calib", "no keywords here"), actual_tag = c('discrepency','discrepency, calib', '') ) # 把你的20个关键词都放进这个向量里 keywords <- c("discrepency", "calib", "items", "great") df_result <- df %>% # 批量生成每个关键词的检测列(TRUE/FALSE) mutate(across(all_of(keywords), ~str_detect(text, .x))) %>% # 按行处理,提取匹配的关键词并拼接 rowwise() %>% mutate(actual_tag = paste(names(.)[which(c_across(all_of(keywords)))], collapse = ", ")) %>% # 删掉临时生成的检测列 select(-all_of(keywords)) print(df_result)
方案二:用purrr直接遍历文本匹配关键词(更简洁)
不用生成中间列,一步到位:
library(dplyr) library(stringr) library(purrr) # 同样先定义关键词向量 keywords <- c("discrepency", "calib", "items", "great") df_result <- df %>% mutate(actual_tag = map_chr(text, ~{ # 找出当前文本匹配的所有关键词 matched_keys <- keywords[str_detect(.x, keywords)] # 用逗号拼接成字符串,无匹配则为空 paste(matched_keys, collapse = ", ") })) print(df_result)
关键说明
- 把
keywords向量替换成你实际的20个关键词就行,不用改其他代码 - 两种方法都能自动处理“0个到全部关键词匹配”的情况,无匹配时
actual_tag会是空字符串 - 方案二更高效,尤其是关键词数量多的时候,不会生成一堆临时列
内容的提问来源于stack exchange,提问作者Ashti
相关产品推荐
相关产品推荐

