R填充字符串中的0

时间:2012-11-22 05:54:27

标签: regex string r

我有以下数据

GT-BU7867-09
GT-BU6523-113
GT-BU6452-1
GT-BU8921-12

如何使用R将连字符后面的数字填充为前导零,以便它有三位数?生成的格式应如下所示:

GT-BU7867-009
GT-BU6523-113
GT-BU6452-001
GT-BU8921-012

3 个答案:

答案 0 :(得分:11)

基础解决方案:

sapply(strsplit(x,"-"), function(x)
    paste(x[1], x[2], sprintf("%03d",as.numeric(x[3])), sep="-")
)

结果:

[1] "GT-BU7867-009" "GT-BU6523-113" "GT-BU6452-001" "GT-BU8921-012"

答案 1 :(得分:3)

使用stringrstr_pad以及strsplit

的解决方案
library(stringr)
    x <- readLines(textConnection('GT-BU7867-09
GT-BU6523-113
GT-BU6452-1
GT-BU8921-12'))

unlist(lapply(strsplit(x,'-'),
       function(x){
         x[3] <- str_pad(x[3], width = 3, side = 'left', pad = '0')
         paste0(x, collapse = '-')}))

[1] "GT-BU7867-009" "GT-BU6523-113" "GT-BU6452-001"
[4] "GT-BU8921-012"

答案 2 :(得分:1)

使用来自包str_pad

str_extractstringr的另一个版本
library(stringr)   
x <- gsub("[[:digit:]]+$", str_pad(str_extract(x, "[[:digit:]]+$"), 3, pad = "0"), x)

即。提取x的尾随数字,用0填充它们为3,然后将它们替换为原始尾随数字。