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

时间:2018-10-02 12:24:00

标签: 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

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

2 个答案:

答案 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")))