首页 > 解决方案 > 将前导零添加到特定行

问题描述

我有一列的 id 有几个数字,后跟一个破折号和其他数字。对于在破折号前有三位数字的任何 id,我想要一个前导 0。并且,对于任何在 - 后面有 1 位数字的 id,我想要添加一个前导零。以下是样本数据。

id
222-5
1023-12
102-22
1231-9

我想:

id
0222-05
1023-12
0102-22
1231-09

我尝试使用 strsplit,但没有成功。关于让它工作的任何建议?

标签: rstringdataframe

解决方案


我们可以使用strsplitto split by -,然后转换为numeric并使用sprintfto 填充开头的零

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))

推荐阅读