我知道有关添加 leading zero 的所有问题以及为他们提供的综合响应,例如 Q1Q2Q3

但对我来说,至少根据我目前的知识,我无法解决我将要做的事情如下:

  • 使用 leading zero 模式匹配在 string 中添加 regex所以,我只想在 leading zero 之后将 digits 添加到 -

  • 例如 :
    Sam <- c("222-88", "537-457", "652-1", "787-892")
    var <- LETTERS[1:4]
    DF<- data.frame(Sam, var)
    DF
          Sam var
    1  222-88   A
    2  537-457  B
    3  652-1    C
    4  787-892  D
    

    预期成绩:
         Sam   var
    1  222-088   A
    2  537-457   B
    3  652-001   C
    4  787-892   D
    

    我试过了 :
    library(stringr)
    temp <- DF[str_detect(DF$Sam, "-[0-9]{1,2}$"),] # will find the rows need the leading zero
    temp
         Sam var
    1 222-88   A
    3  652-1   C
    
    formatC(temp$Sam, width = 2,flag = 0)# not correct!
    

    最佳答案

    我们可以用 base R 做到这一点,通过 - 分割字符串,然后在转换为 sprintfnumeric 后使用 paste 填充 0

    DF$Sam <- sapply(strsplit(as.character(DF$Sam), "-"), function(x)
           paste(x[1],sprintf("%03d", as.numeric(x[2])), sep="-"))
    DF$Sam
    #[1] "222-088" "537-457" "652-001" "787-892"
    

    如果我们需要正则表达式方法,我们可以使用 gsubfn
    library(gsubfn)
    gsubfn("(\\d+)$", ~sprintf("%03d", as.numeric(x)), as.character(DF$Sam))
    #[1] "222-088" "537-457" "652-001" "787-892"
    

    关于r: find a pattern and edit,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45968557/

    10-09 21:27