如何使用 R 在缺少某些值的唯一标识符中添加缺少的零?

How to add missing zeros in a unique identifier that is missing some values using R?

我有一个唯一的 ID,总共应该包含 13 个字符,其中 15 个带有破折号。它应该是这样的

2005-067-000043

然而有些条目可能是这样的

2005-067-00043 or 2005-67-000043 or 2005-067-0000043

我想要一个脚本,上面写着第一和第二个破折号之间应该有三个字符,如果多了就在前面删零,如果少就在前面加零。最后一节也是如此,它说在最后一个破折号之后应该有六个字符,如果 less 在前面加零,或者如果 more 在前面减零。

您可以将数据拆分为 3 列,在第 2 列和第 3 列中仅保留 3 和 6 个字符,然后将这些列重新合并为一个。

library(dplyr)
library(tidyr)

separate(df, x, paste0('col', 1:3), sep = '-') %>%
  mutate(col2 = sprintf('%03s', substring(col2, nchar(col2) - 2)), 
         col3 = sprintf('%06s', substring(col3, nchar(col3) - 5))) %>%
  unite(result, starts_with('col'), sep = '-')

#           result
#1 2005-067-000043
#2 2005-067-000043
#3 2005-067-000043
#4 2005-067-000043
x <- c('2005-067-000043', '2005-067-00043', '2005-67-000043', '2005-067-0000043')
df <- data.frame(x)
df

#                 x
#1  2005-067-000043
#2   2005-067-00043
#3   2005-67-000043
#4 2005-067-0000043