我有一组数据,看起来像这样:
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之前添加一个零:
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前加两个或三个0呢?
扩展@goodside的回应:
在某些情况下,你可能想用零填充字符串(例如fips代码或其他类似数字的因素)。在OSX / Linux:
> sprintf("%05s", "104")
[1] "00104"
但是因为sprintf()调用了操作系统的C sprintf()命令,在Windows 7中,你会得到一个不同的结果:
> sprintf("%05s", "104")
[1] " 104"
所以在Windows机器上的工作是:
> sprintf("%05d", as.numeric("104"))
[1] "00104"
扩展@goodside的回应:
在某些情况下,你可能想用零填充字符串(例如fips代码或其他类似数字的因素)。在OSX / Linux:
> sprintf("%05s", "104")
[1] "00104"
但是因为sprintf()调用了操作系统的C sprintf()命令,在Windows 7中,你会得到一个不同的结果:
> sprintf("%05s", "104")
[1] " 104"
所以在Windows机器上的工作是:
> sprintf("%05d", as.numeric("104"))
[1] "00104"
下面是另一种将前导0添加到字符串(如cusip)的替代方法,它有时看起来像一个数字,许多应用程序(如Excel)将破坏并删除前导0或将其转换为科学符号。
当我尝试@metasequoia提供的答案时,返回的向量有前导空格,而不是0。这与@user1816679提到的问题相同——删除0周围的引号或将%d更改为%s也没有什么不同。仅供参考,我使用的是运行在Ubuntu服务器上的RStudio服务器。这个两步解决方案对我很管用:
gsub(pattern = “ ”, replace = “0”, x = sprintf(fmt = “%09s”, ids[,CUSIP]))
使用magrittr包中的%>% pipe函数,它看起来像这样:
sprintf(fmt = "%09s", ids[,CUSIP]) %>% gsub(pattern = " ", replace = "0", x = .)
我更喜欢一个功能单一的解决方案,但它确实可行。