我有以下数据
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
基础解决方案:
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"
使用stringr
andstr_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"
另一个使用str_pad
和str_extract
来自包的版本stringr
library(stringr)
x <- gsub("[[:digit:]]+$", str_pad(str_extract(x, "[[:digit:]]+$"), 3, pad = "0"), x)
即提取 x 的尾随数字,用 0 将它们填充为 3,然后将它们替换为原始尾随数字。