我有一个列,其中有一串长度范围为10和11的数字。这是一个列中一些值的例子。
column=c("5699420001","00409226602")
我如何在前四位数字后面加上连字符(10个字符的字符串)和前五位数字(11个字符的字符串),以及在两个长度的后四位数字后面加上连字符? 下面是输出结果。我想使用 stringr
为这个。
column_standard=c("5699-4200-01","00409-2266-02")
下面是一个使用捕获组的解决方案 stringr
's str_replace()
函数。
library(stringr)
column <- c("5699420001","00409226602")
column_standard <- sapply(column, function(x){
ifelse(nchar(x) == 11,
stringr::str_replace(x, "^([0-9]{5})([0-9]{4})(.*)", "\\1\\-\\2-\\3"),
stringr::str_replace(x, "^([0-9]{4})([0-9]{4})(.*)", "\\1\\-\\2-\\3"))
})
column_standard
# 5699420001 00409226602
# "5699-4200-01" "00409-2266-02"
代码应该是不言自明的。我可以根据要求提供详细的解释。
试着用这个作为你的表达式。
\b(\d{4,5})(\d{4})(\d{2}\b)
它设置了三个捕获组,你可以在以后的替换中使用它们,以方便在它们之间添加连字符。
然后你只需用替换。
\1-\2-\3
感谢 @Dunois 指出了它在代码中的作用。
column_standard <- sapply(column, function(x) stringr::str_replace(x, "^(\\d{4,5})(\\d{4})(\\d{2})", "\\1\\-\\2-\\3"))
下面是一个实况 例子.