如何在一串数字的第五项后添加破折号?



我试图在R中做一些数据整理与邮政编码,有些是5位数,其他是9,我想从XXXXXXXXX更改为XXXXX-XXXX。Df是包含这些邮政编码的数据帧,其中包含相同邮政编码的多个重复。

a <- df$Zip_Code
for (i in a){
if (length(i) > 5){
str_replace(i, '(d{5})','1-')
}}

代码运行找到,但值'a'没有改变,所以我想知道我做错了什么。

您可以使用以下方法在基数R或stringr中完成此操作。您不需要for循环或if语句,因为R使用向量化:

数据
zip <- c(12345, 12345, 123456789, 123456789)

substr

使用substr将前5位数字与后4位数字分开,然后使用paste0将它们重新组合在一起

zip[nchar(zip) > 5] <- paste0(substr(zip[nchar(zip) > 5], 1, 5),
"-",
substr(zip[nchar(zip) > 5], 5, 9))
# [1] "12345"       "12345"       "12345-56789" "12345-56789"

gsub

你也可以选择使用gsub来使它更优雅:

zip[nchar(zip) > 5] <- gsub('^(.{5})(.*)$', 
'\1-\2', 
zip[nchar(zip) > 5])
# [1] "12345"      "12345"      "12345-6789" "12345-6789"

stringr

既然你标记了stringr,这里是使用stringr::str_replace的方法:

zip[nchar(zip) > 5] <- stringr::str_replace(zip[nchar(zip) > 5], 
pattern = "(.{5})(.*)", 
replacement = "\1-\2")
# [1] "12345"      "12345"      "12345-6789" "12345-6789"

相关内容

  • 没有找到相关文章

最新更新