我有下面的数据集和这段代码,它将向带有破折号的值添加前导零,使它们具有XXXXXXXX-XX模式。它部分工作:
df.direccionamientos = structure(list(D_CodSerTecAEntregar = c("139",
"20018219-1",
"2019-1",
"20018219-1"
)),
.Names = "D_CodSerTecAEntregar",
row.names = c(NA, -4L),
class = c("tbl_df", "tbl", "data.frame"))
#Leading zeroes
df.direccionamientos$D_CodSerTecAEntregar1 <- ifelse(grepl('-', df.direccionamientos$D_CodSerTecAEntregar),
do.call(sprintf, c(fmt = '%08d-%02d',
read.table(text = df.direccionamientos$D_CodSerTecAEntregar,
header = FALSE, sep="-",
fill = TRUE))),
df.direccionamientos$D_CodSerTecAEntregar)
但是,当具有不同模式的新值通过代码时,这变得复杂(参见新数据集的第5行)。它会打乱所有新创建的代码:
df.direccionamientos = structure(list(D_CodSerTecAEntregar = c("139",
"20018219-1",
"2019-1",
"20018219-1",
"1R1033181000100"
)),
.Names = "D_CodSerTecAEntregar",
row.names = c(NA, -5L),
class = c("tbl_df", "tbl", "data.frame"))
#Leading zeroes
df.direccionamientos$D_CodSerTecAEntregar1 <- ifelse(grepl('-', df.direccionamientos$D_CodSerTecAEntregar),
do.call(sprintf, c(fmt = '%08d-%02d',
read.table(text = df.direccionamientos$D_CodSerTecAEntregar,
header = FALSE, sep="-",
fill = TRUE))),
df.direccionamientos$D_CodSerTecAEntregar)
1条答案
按热度按时间jfewjypa1#
问题是,当输入中有字母时,在应用
sprintf
之前,字段不能自动转换为整数。下面是一个使用tidyr
和dplyr
的简化,它纠正了这个问题(并且应该更有效):