您可以将: 或seq 用于序列,并且可以在前导文本前添加paste 或paste0。问题的核心在于以 0 开头的数字填充。
您的选择是:
-
stri_pad 来自 stringi(更直观)
-
str_pad 来自 stringr(更直观)
-
sprintf(无需包)
-
formatC(如果你熟悉 C 语言,那就太好了printf)
请注意,尽管不是这种特殊情况,但有些情况需要禁用序列中数字的科学记数法。这可以通过来自devtools 的options 或with_options 来完成。
请参阅this popular post 了解每个示例。
使用formatC:
uid <- paste0("AKM_CC_Test_", formatC(1:10000, width = 18, format = "d", flag = "0"))
head(uid)
[1] "AKM_CC_Test_000000000000000001" "AKM_CC_Test_000000000000000002" "AKM_CC_Test_000000000000000003" "AKM_CC_Test_000000000000000004"
[5] "AKM_CC_Test_000000000000000005" "AKM_CC_Test_000000000000000006"
使用stringr 包:
uid <- paste0("AKM_CC_Test_", str_pad(1:10000, 18, pad = "0")) # remember to load stringr
head(uid)
[1] "AKM_CC_Test_000000000000000001" "AKM_CC_Test_000000000000000002" "AKM_CC_Test_000000000000000003" "AKM_CC_Test_000000000000000004"
[5] "AKM_CC_Test_000000000000000005" "AKM_CC_Test_000000000000000006"
使用sprintf:
head(sprintf("%s%0*d", "AKM_CC_Test_", 18, 1:10000))
[1] "AKM_CC_Test_000000000000000001" "AKM_CC_Test_000000000000000002" "AKM_CC_Test_000000000000000003" "AKM_CC_Test_000000000000000004"
[5] "AKM_CC_Test_000000000000000005" "AKM_CC_Test_000000000000000006"
使用 stringi 包中的 stri_pad:
uid <- paste0("AKM_CC_Test_", stri_pad(1:10000, 18, pad = "0")) # remember to load stringi
head(uid)
[1] "AKM_CC_Test_000000000000000001" "AKM_CC_Test_000000000000000002" "AKM_CC_Test_000000000000000003" "AKM_CC_Test_000000000000000004"
[5] "AKM_CC_Test_000000000000000005" "AKM_CC_Test_000000000000000006"