R 将前导零添加到特定行
我有一个列,它的ID有几个数字,后面是破折号和其他数字。对于破折号前有三位数字的任何id,我需要一个前导0。并且,对于任何在-,后面有一个数字的id,我需要加一个前导零。下面是示例数据R 将前导零添加到特定行,r,string,dataframe,R,String,Dataframe,我有一个列,它的ID有几个数字,后面是破折号和其他数字。对于破折号前有三位数字的任何id,我需要一个前导0。并且,对于任何在-,后面有一个数字的id,我需要加一个前导零。下面是示例数据 id 222-5 1023-12 102-22 1231-9 我想: id 0222-05 1023-12 0102-22 1231-09 我尝试使用strsplit,但没有成功。有什么建议吗?我们可以使用strsplit按-分割,然后转换成数字,并使用sprintf填充开头的零 df$id <- sa
id
222-5
1023-12
102-22
1231-9
我想:
id
0222-05
1023-12
0102-22
1231-09
我尝试使用strsplit,但没有成功。有什么建议吗?我们可以使用
strsplit
按-
分割,然后转换成数字
,并使用sprintf
填充开头的零
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"
数据
df另一个使用sub的人:gsub('(?=^\\d{3}\\\)|(?谢谢,@Akrun!
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))