R tidyverse中如何基于关键词匹配为数据框字符列分配对应类别?
实现方案
tidyverse生态可通过dplyr+stringr的组合实现该需求,核心逻辑是从描述列提取匹配的关键词,再关联映射表匹配类别标签,具体实现如下:
步骤1:加载依赖包与构造示例数据
library(tidyverse) # 构造关键词-类别映射表 lookup_df <- tibble( Keyword = c("dog", "cat", "tiger", "cheetah", "man"), Category = c("walk", "house", "jungle", "fast", "office") ) # 构造待处理的描述数据框 desc_df <- tibble( description = c("dog is barking", "cat is purring","tiger is hunting", "cheetah is running", "man is working") )
步骤2:类别匹配的两种实现方案
方案1:关键词数量少时直接手写匹配规则
适合关键词数量少、规则灵活调整的场景,直接用case_when匹配:
result1 <- desc_df %>% mutate( category = case_when( str_detect(description, "dog") ~ "walk", str_detect(description, "cat") ~ "house", str_detect(description, "tiger") ~ "jungle", str_detect(description, "cheetah") ~ "fast", str_detect(description, "man") ~ "office", .default = NA_character_ ) )
方案2:关键词数量多时自动关联映射表
无需手动逐行写匹配规则,自动复用映射表的匹配逻辑,适合关键词量大的场景:
result2 <- desc_df %>% # 提取描述列中命中的关键词 mutate( matched_keyword = str_extract(description, paste(lookup_df$Keyword, collapse = "|")) ) %>% # 关联映射表获取对应类别 left_join(lookup_df, by = c("matched_keyword" = "Keyword")) %>% # 不需要保留匹配关键词可取消注释下行删除 # select(-matched_keyword)
补充说明:如果单条描述可能命中多个关键词,可将
str_extract替换为str_extract_all提取所有命中项,再按需处理多匹配场景。
内容的提问来源于stack exchange,提问作者Adreeta
相关产品推荐
相关产品推荐

