我有一组看起来像这样的数据: 服务器
anim <- c(25499,25500,25501,25502,25503,25504) sex <- c(1,2,2,1,2,1) wt <- c(0.8,1.2,1.0,2.0,1.8,1.4) data <- data.frame(anim,sex,wt) data anim sex wt anim2 1 25499 1 0.8 2 2 25500 2 1.2 2 3 25501 2 1.0 2 4 25502 1 2.0 2 5 25503 2 1.8 2 6 25504 1 1.4 2
我但愿在每一个动物ID以前添加一个零: app
data anim sex wt anim2 1 025499 1 0.8 2 2 025500 2 1.2 2 3 025501 2 1.0 2 4 025502 1 2.0 2 5 025503 2 1.8 2 6 025504 1 1.4 2
出于兴趣考虑,若是我须要在动物ID以前添加两个或三个零该怎么办? ide
扩展@goodside的响应: 函数
在某些状况下,您可能但愿用零填充字符串(例如,fip代码或其余相似数字的因子)。 在OSX / Linux中: ui
> sprintf("%05s", "104") [1] "00104"
可是因为sprintf()
调用了操做系统的C sprintf()
命令(在此进行了讨论),所以在Windows 7中,您会获得不一样的结果: spa
> sprintf("%05s", "104") [1] " 104"
所以,在Windows计算机上,解决方法是: 操作系统
> sprintf("%05d", as.numeric("104")) [1] "00104"
str_pad
包中的stringr
是替代方法。 code
anim = 25499:25504 str_pad(anim, width=6, pad="0")
data$anim <- sapply(0, paste0,data$anim)
这是在字符串(例如CUSIP)中添加前导0的另外一种选择,有时看起来像数字,而且许多应用程序(例如Excel)会破坏并删除前导0或将其转换为科学计数法。 ip
当我尝试@metasequoia提供的答案时,返回的向量有前导空格而不是0
s。 这是@ user1816679提到的相同问题-删除0
先后的引号或从%d
更改成%s
也没有任何区别。 仅供参考,我正在使用在Ubuntu服务器上运行的RStudio服务器。 这个小小的两步解决方案为我工做: 字符串
gsub(pattern = " ", replacement = "0", x = sprintf(fmt = "%09s", ids[,CUSIP]))
使用magrittr
软件包中的%>%
管道函数,它看起来可能像这样:
sprintf(fmt = "%09s", ids[,CUSIP]) %>% gsub(pattern = " ", replacement = "0", x = .)
我更喜欢一种功能的解决方案,可是它能够工做。
对于但愿数字字符串保持一致的其余状况,我作了一个函数。
有人可能会发现这颇有用:
idnamer<-function(x,y){#Alphabetical designation and number of integers required id<-c(1:y) for (i in 1:length(id)){ if(nchar(id[i])<2){ id[i]<-paste("0",id[i],sep="") } } id<-paste(x,id,sep="") return(id) } idnamer("EF",28)
抱歉,格式化。