R 在连字符后的字符串内填充 0



我有以下数据

GT_BUC-01_BUCST-19
ADT_BURC-1_BUCST-09
BT_BUDDC-1_BUDSCST-29
CAST_BUC-31_BUCST-9
CAST_BUC-1_BUCST-9

我如何使用R使数字后的两个连字符垫前导零,所以它将有两个数字?生成的格式应该如下所示:

GT_BUC-01_BUCST-19
ADT_BURC-01_BUCST-09
BT_BUDDC-01_BUDSCST-29
CAST_BUC-31_BUCST-09
CAST_BUC-01_BUCST-09

一种选择是使用stringr::str_replace_all

x <- c('GT_BUC-01_BUCST-19', 'ADT_BURC-1_BUCST-09', 
'BT_BUDDC-1_BUDSCST-29', 'CAST_BUC-31_BUCST-9', 'CAST_BUC-1_BUCST-9')
stringr::str_replace_all(x, '\d+', function(m) sprintf('%02s', m))
#[1] "GT_BUC-01_BUCST-19"     "ADT_BURC-01_BUCST-09"  
#[3] "BT_BUDDC-01_BUDSCST-29" "CAST_BUC-31_BUCST-09"  
#[5] "CAST_BUC-01_BUCST-09"  

您可以尝试使用gsub如下:

x <- gsub("-(\d)(?!\d)", "-0\1", x, perl=TRUE)
x
[1] "GT_BUC-01_BUCST-19"     "ADT_BURC-01_BUCST-09"   "BT_BUDDC-01_BUDSCST-29"
[4] "CAST_BUC-31_BUCST-09"   "CAST_BUC-01_BUCST-09"  

数据:

x <- c("GT_BUC-01_BUCST-19",
"ADT_BURC-1_BUCST-09",
"BT_BUDDC-1_BUDSCST-29",
"CAST_BUC-31_BUCST-9",
"CAST_BUC-1_BUCST-9")

这里使用的regex模式只匹配破折号后面跟着一个数字。在这种情况下,我们然后通过在这个数字前面加上一个0来替换。

最新更新