r - 将前导零添加到特定行
问题描述
我有一列的 id 有几个数字,后跟一个破折号和其他数字。对于在破折号前有三位数字的任何 id,我想要一个前导 0。并且,对于任何在 - 后面有 1 位数字的 id,我想要添加一个前导零。以下是样本数据。
id
222-5
1023-12
102-22
1231-9
我想:
id
0222-05
1023-12
0102-22
1231-09
我尝试使用 strsplit,但没有成功。关于让它工作的任何建议?
解决方案
我们可以使用strsplit
to split by -
,然后转换为numeric
并使用sprintf
to 填充开头的零
df$id <- sapply(strsplit(df$id, "-"), function(x)
do.call(sprintf, c(f = "%04d-%02d", as.list(as.numeric(x)))))
df$id
#[1] "0222-05" "1023-12" "0102-22" "1231-09"
或者我们可以使用sub
捕获为组并在字符数较少时插入 0
sub("-(\\d)$", "-0\\1", sub("^(\\d{3})-", "0\\1-", df$id))
#[1] "0222-05" "1023-12" "0102-22" "1231-09"
数据
df <- structure(list(id = c("222-5", "1023-12", "102-22", "1231-9")),
class = "data.frame", row.names = c(NA,
-4L))
推荐阅读
- r - 如何读取由多个不同长度的注释数据帧组成的单个 .csv 文件作为列表?
- angular - 在数据出现之前在视图中加载指令的问题
- sql - 尽管源表中缺少记录,如何始终运行 UPDATE FROM?
- autocomplete - Visual Studio Code 中的自动完成功能对 Bootstrap 4 不起作用?
- python - tensorflow:具有单个神经元的输出层,预期浮点输出 [0.0,1.0]
- algorithm - 房屋占用租户优化方案/算法(组合)
- azure - 如何在 azure 门户上使用键盘快捷键在德语键盘上进行搜索?
- google-chrome-extension - 如何在 Outlook 的 Chrome 扩展中获取电子邮件元数据(ConversationId、类别)
- java - 访问 Spring bean 类时并发修改异常
- python-3.x - 标记来自两个不同数据框列的数据点