【问题标题】:add leading zeros to specific rows将前导零添加到特定行
【发布时间】:2020-12-29 17:06:19
【问题描述】:

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

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

我想要:

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

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

【问题讨论】:

    标签: r string dataframe


    【解决方案1】:

    我们可以用strsplit除以-,然后转换成numeric,用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"
    

    或者我们可以使用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))
    

    【讨论】:

    • 另一个使用子:gsub('(?=^\\d{3}\\-)|(?&lt;=\\-)(?=\\d$)', '0', df$id, perl = TRUE)
    猜你喜欢
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 2011-02-03
    • 2012-02-13
    • 2017-04-22
    • 2014-09-09
    相关资源
    最近更新 更多