如何将前导数字标识符(不一定为零)添加到 r 中的字符串
Posted
技术标签:
【中文标题】如何将前导数字标识符(不一定为零)添加到 r 中的字符串【英文标题】:How to I add a leading numeric identifier (not necessarily zero) to a character string in r 【发布时间】:2018-10-02 12:24:00 【问题描述】:如果这是重复的,我深表歉意,我已经搜索了所有我能找到的“添加前导零”内容,我正在努力寻找一个我可以使用的解决方案。我有以下内容:
siteid<-c("1","11","111")
modifier<-c("44","22","11")
df<-data.frame(siteid,modifier)
我想要一个修改后的siteid
,它总是六 (6) 个字符长,用零填充空白。 nchar
中的站点 ID 可以从 1 到 3 变化,修饰符的长度始终为 2,零的数量可以根据站点 ID 的长度而变化(因此 6 始终是最终修改的长度)。
我想要以下最终输出:
df
# siteid modifier mod.siteid
#1 1 44 440001
#2 11 22 220011
#3 111 11 110111
感谢您的任何建议或指导。这也可以是数字,但似乎字符操作有更多选择...?
【问题讨论】:
【参考方案1】:这里的词汇是 left pad 和 paste 这里是使用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")))
【讨论】:
或者一次完成所有事情sprintf
呼叫:with(df, sprintf("%s%04d", modifier, as.integer(siteid)))
我喜欢这个,谢谢。我对其进行了一些修改,以包含 df$mod.siteid<-ifelse(nchar(siteid)<6,with(df,sprintf("%s%04d",modifier,as.integer(mod.siteid))),siteid)
以说明存在的完整站点 ID。【参考方案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
【讨论】:
以上是关于如何将前导数字标识符(不一定为零)添加到 r 中的字符串的主要内容,如果未能解决你的问题,请参考以下文章