三行代码  ›  专栏  ›  技术社区  ›  xyz

R:删除子字符串并通过添加一个数字来更改剩余的字符串

  •  1
  • xyz  · 技术社区  · 1 月前

    在R中,我有一些字母和数字的字符串

    A11B3XyC4
    A1B14C23XyC16
    B14C23XyC16D3
    B14C23C16D3
    

    我想删除“Xy”部分(总是相同的字母),当我这样做时,我想将字母B后面的数字增加1(其他所有内容都应该保持不变)。

    A11B4C4
    A1B15C23C16
    B15C23C16D3
    B14C23C16D3
    

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

    1 回复  |  直到 1 月前
        1
  •  2
  •   akrun    1 月前

    str_replace 删除“Xy”后,仅在“Xy”子字符串中存在“Xy”子字符串的情况下,对“B”字符串后面的数字子字符串进行增量 case_when

    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")