如何将前导数字标识符(不一定为零)添加到 r 中的字符串



如果这是重复的,我深表歉意,我已经搜索了我能找到的所有"添加前导零"内容,我正在努力找到一个我可以使用的解决方案。 我有以下几点:

siteid<-c("1","11","111")
modifier<-c("44","22","11")
df<-data.frame(siteid,modifier)

我想要一个修改后的siteid,它总是六 (6( 个字符长,零来填补空白。站点 ID 的nchar可以从 1 到 3 不等,修饰符的长度始终为 2,零的数量可以根据站点 ID 的长度而变化(因此 6 始终是最终修改的长度(。

我想要以下最终输出:

df
#  siteid modifier mod.siteid
#1      1       44     440001
#2     11       22     220011
#3    111       11     110111

感谢您的任何建议或指导。这也可能是数字,但似乎角色操作有更多的选择......?

这里的词汇是左垫粘贴这里是使用sprintf()的一种方式::

df$mod.siteid <- with(df, sprintf("%s%04d", modifier, as.integer(siteid)))
# Note: 
# code simplified thanks to suggestion by Maurits.

输出:

siteid modifier mod.siteid
1      1       44     440001
2     11       22     220011
3    111       11     110111

数据

df <- data.frame(
siteid   = c("1", "11", "111"),
modifier = c("44", "22", "11"),
stringsAsFactors = FALSE
)  

另外:如果你不想留下0垫,那么使用stringi包是一种选择:with(df, paste0(modifier, stringi::stri_pad_left(siteid, 4, "q")))

siteid<-c("1","11","111")
modifier<-c("44","22","11")
df<-data.frame(siteid,modifier, stringsAsFactors = FALSE)
df$mod.siteid = paste0( df$modifier, 
formatC( as.numeric(df$siteid), width = 4, format = "d", flag="0") )
df
#   siteid modifier mod.siteid
# 1      1       44     440001
# 2     11       22     220011
# 3    111       11     110111

最新更新