我可以使用 gsub 函数找到一个模式并用 2 个不同的模式替换它吗?

Posted

技术标签:

【中文标题】我可以使用 gsub 函数找到一个模式并用 2 个不同的模式替换它吗?【英文标题】:Can i use gsub function to find a pattern and replace it by 2 different patterns? 【发布时间】:2020-10-19 01:29:01 【问题描述】:

我需要帮助来找到一种模式并用两种不同的方式替换它。例如,单词"Code/i" 应替换为"Code, Codi"

我应该使用什么代码来替换以逗号分隔的两个结果?我是 R 新手,假设需要使用一些元字符或正则表达式?另外,我需要使用基本功能并且没有外部包。感谢任何反馈和帮助,因为我被卡住了!谢谢

a <- c("Code/i", "Karina")

gsub(pattern = "/i", replacement= "", a)

期望的结果:

"Code, Codi, Karina"

【问题讨论】:

【参考方案1】:

您可以使用subpaste0 并在相关值(包含/ 模式的那些)上对您的向量a 进行子集化:

数据:

a <- c("Code/i", "Karina", "Jimmy", "John Bolton", "Pete/i")

解决方案:

c(paste0(sub("/.*", "", a[grepl("/", a)]), ", ", sub("./", "", a[grepl("/", a)])), a[!grepl("/", a)])

结果:

[1] "Code, Codi"  "Pete, Peti"  "Karina"      "Jimmy"       "John Bolton"

【讨论】:

已多次编辑答案。现在它应该是你想要的。 感谢您的回答!它肯定有效,但我面临另一个问题。如果我将其他单词存储在 已编辑答案。如果回答了您的问题,请点击对勾接受答案。 谢谢你,克里斯!结果,我需要拥有所有名称,包括那些未修改的名称,例如“Karina”。现在,当我应用此代码时,它给了我一个错误,即替换的长度与整个数据的长度不匹配。有什么办法解决吗?

以上是关于我可以使用 gsub 函数找到一个模式并用 2 个不同的模式替换它吗?的主要内容,如果未能解决你的问题,请参考以下文章

在代码库中找到一个模式并显示一个漂亮的结果集

如何使用 gsub 在 for 循环中找到完全匹配?

具有2个变量的隐式函数

R:在一个管道中组合几个 gsub() 函数

使用 gsub 从字符串中删除模式

gsub 速度与图案长度