如何在R语言中用mutate()从向量匹配模式并新增数据框列
解决方案
可以用stringr包的str_extract()函数结合dplyr的mutate()实现需求,这个函数能直接从字符串中提取匹配到的模式,适配多场景的字符串匹配需求。
完整代码示例
library(dplyr) library(stringr) # 构造目标数据框 df <- data.frame(A = c("148apple32394", "386pear3", "23banana3808")) # 定义需要匹配的模式向量 patterns <- c("apple", "banana", "pear") # 新增匹配结果列 df <- df %>% mutate(B = str_extract(A, paste(patterns, collapse = "|"))) print(df)
代码说明
paste(patterns, collapse = "|"):将模式向量拼接成正则表达式格式(用|分隔表示“或”逻辑),让str_extract()能在每个字符串中查找匹配项。str_extract():从A列的每个字符串中提取第一个匹配到的模式,直接返回匹配的字符串内容,刚好作为新列B的值。
扩展:处理多匹配场景
如果某行字符串可能匹配多个模式,可以用str_extract_all()提取所有匹配项,再合并为单个字符串:
df <- df %>% mutate(B = str_extract_all(A, paste(patterns, collapse = "|")) %>% map_chr(str_c, collapse = ", "))
内容的提问来源于stack exchange,提问作者James Cook
相关产品推荐
相关产品推荐

