我很抱歉,如果这是重复的,我已经搜索了所有可以找到的“添加前导零”内容,并且正在努力寻找可以使用的解决方案。我有以下内容:
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
感谢任何建议或指导。这也可以是数字,但似乎字符操作有更多选择...?
答案 0 :(得分:2)
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
答案 1 :(得分:2)
这里的词汇是左键和粘贴这是使用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")))