R:删除子字符串并通过添加数字来更改剩余的字符串
Posted
技术标签:
【中文标题】R:删除子字符串并通过添加数字来更改剩余的字符串【英文标题】:R: remove substring and change the remaining string by addition of a number 【发布时间】:2022-01-05 07:27:57 【问题描述】:在 R 中:我有一些带有以下字母和数字模式的字符串
A11B3XyC4
A1B14C23XyC16
B14C23XyC16D3
B14C23C16D3
我想删除“Xy”部分(总是相同的字母),当我这样做时,我想将字母 B 后面的数字加一(其他一切都应该保持不变)。 当字符串中没有“Xy”时,字符串没有变化 结果应如下所示:
A11B4C4
A1B15C23C16
B15C23C16D3
B14C23C16D3
你能给我指出一个能够做到这一点的功能吗?我很难用字符串进行计算 (x+1)。
谢谢!
【问题讨论】:
【参考方案1】:我们可以使用str_replace
在删除“Xy”后对“B”字符串后面的数字子字符串进行递增,仅适用于case_when
中有“Xy”子字符串的情况
library(stringr)
library(dplyr)
case_when(str_detect(str1, "Xy") ~ str_replace(str_remove(str1,
"Xy"), "(?<=B)(\\d+)", function(x) as.numeric(x) + 1), TRUE ~str1)
[1] "A11B4C4" "A1B15C23C16" "B15C23C16D3" "B14C23C16D3"
数据
str1 <- c("A11B3XyC4", "A1B14C23XyC16", "B14C23XyC16D3", "B14C23C16D3")
【讨论】:
非常感谢!这很完美。我不知道“case_when”——看起来真的很方便! @akrun:和蔼可亲。当您在此构造中调用函数function(x) as.numeric(x) +1 )
时,它是如何命名的。因此,对于 str_replace
中的替换参数,您将 B
更改为数字后的第一个数字并加 1。因此,您可以像在 my_func
@TarJae (?<=B)
是一个正则表达式环视,(\\d+)
被捕获为一个组 - 即一个或多个数字。这个捕获的组通过在替换中传递一个函数并添加 1 来转换为数字
@TarJae 根据?str_replace
- replacement
- Alternatively, pass a function to replacement: it will be called once for each match and its return value will be used to replace the match.
以上是关于R:删除子字符串并通过添加数字来更改剩余的字符串的主要内容,如果未能解决你的问题,请参考以下文章