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