如何有条件地将元素添加到 R 中字符的开头?

How can I add an element to the beginning of a character in R conditionally?

我是编码新手,正在学习 R 的基础知识。我有一个在 Excel 中制作的数据集。它们是邮政编码;但是,导出时会自动删除以 0 开头的邮政编码。我正在尝试遍历并将 0 添加回去。

我的想法是,假设邮政编码 w/o 初始零的长度为 4 个字符,我只是找到长度为 4 的迭代,然后在前面添加一个 0,但我不是得到正确的答案。

zip<-c(61415, 19087, 63122, 3104, 1938)
zip<-as.character(zip)

>for(i in zip){
+
+if(nchar(i)==4){
+   paste0("0",i)
+   }
+  }

NULL

我应该得到:

"61415", "19087", "63122", "03104", "01938"

可以通过将数字 vector 格式化为 sprintf

来完成
sprintf("%05d", zip)
#[1] "61415" "19087" "63122" "03104" "01938"

另一种选择是str_pad

library(stringr)
str_pad(zip, pad = "0", width = 5)
#[1] "61415" "19087" "63122" "03104" "01938"

注意:这两个选项都不需要任何循环或任何条件语句

数据

zip <- c(61415, 19087, 63122, 3104, 1938)

如果"zip"是字符串,也可以试试:

ifelse(nchar(zip) != 5, paste0("0", zip), zip)

[1] "61415" "19087" "63122" "03104" "01938"

如果 "zip" 是一个数值向量:

formatC(zip, width = 5, format = "d", flag = "0")