【问题标题】:R: remove substring and change the remaining string by addition of a numberR:删除子字符串并通过添加数字来更改剩余的字符串
【发布时间】:2022-01-05 07:27:57
【问题描述】:

在 R 中:我有一些带有以下字母和数字模式的字符串

A11B3XyC4
A1B14C23XyC16
B14C23XyC16D3
B14C23C16D3

我想删除“Xy”部分(总是相同的字母),当我这样做时,我想将字母 B 后面的数字加一(其他一切都应该保持不变)。 当字符串中没有“Xy”时,字符串没有变化 结果应如下所示:

A11B4C4
A1B15C23C16
B15C23C16D3
B14C23C16D3

你能给我指出一个能够做到这一点的功能吗?我很难用字符串进行计算 (x+1)。

谢谢!

【问题讨论】:

    标签: r string


    【解决方案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 (?&lt;=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.
    猜你喜欢
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多