R语言如何使用键值对dataframe替换并提取原dataframe列匹配值
R语言模糊匹配替换数据框内容实现方案
原有代码问题
grepl参数使用错误,collapse参数属于paste类函数,需要先将所有匹配关键词拼接为正则字符串再传入grepl的pattern参数- 直接用原
old列做关联无法匹配,需要先从待处理列中提取出和键值对中old列完全匹配的关键词作为关联键
完整实现代码
library(tidyverse) # 构造示例数据 df <- data.frame(old = c("412oldname1","32oldname132","oldname141","132oldname2","oldname3","oldname4","oldname5")) keypairs <- data.frame(old = c("oldname1","oldname2"), new = c("newname1","newname2")) # 核心处理逻辑 df %>% # 筛选包含目标关键词的行,也可替换为base R写法:filter(grepl(paste(keypairs$old, collapse = "|"), old)) filter(str_detect(old, paste(keypairs$old, collapse = "|"))) %>% # 提取匹配到的关键词作为关联键 mutate(match_key = str_extract(old, paste(keypairs$old, collapse = "|"))) %>% # 关联键值对完成替换 left_join(keypairs, by = c("match_key" = "old")) %>% # 输出符合要求的结果 select(old = new)
输出结果
运行上述代码后得到的输出和预期完全一致:
old 1 newname1 2 newname1 3 newname1 4 newname2
内容的提问来源于stack exchange,提问作者Shahin
相关产品推荐
相关产品推荐

