java 前导0_如何添加前导零? - javail的个人空间 - OSCHINA - 中文开源技术交流社区...

我有一组看起来像这样的数据:

anim

sex

wt

data

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之前添加两个或三个零该怎么办?

#1楼

扩展@goodside的响应:

在某些情况下,您可能希望用零填充字符串(例如,fip代码或其他类似数字的因子)。 在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"

#2楼

str_pad包中的stringr是替代方法。

anim = 25499:25504

str_pad(anim, width=6, pad="0")

#3楼

data$anim

#4楼

这是在字符串(例如CUSIP)中添加前导0的另一种选择,有时看起来像数字,并且许多应用程序(例如Excel)会破坏并删除前导0或将其转换为科学计数法。

当我尝试@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 = .)

我更喜欢一种功能的解决方案,但是它可以工作。

#5楼

对于希望数字字符串保持一致的其他情况,我做了一个函数。

有人可能会发现这很有用:

idnamer

id

for (i in 1:length(id)){

if(nchar(id[i])<2){

id[i]

}

}

id

return(id)

}

idnamer("EF",28)

抱歉,格式化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值