【问题标题】:How to delete the 0 before a number?如何删除数字前的0?
【发布时间】:2020-10-20 05:12:54
【问题描述】:

我在 R 中遇到以下困难:一个数据框有一个带有一些 ID 的列,这些 ID 是字符格式。删除前面的 0 最简洁的方法是什么?

例子:

这就是我所拥有的:

ID <- as.character(c("001001","0001002","01003","001004","1005"))
order <- c("a","b","c","d","e")
df <- as.data.frame(cbind(ID, order))

这就是我想要的:

ID2 <- as.character(c("1001","1002","1003","1004","1005"))
order2 <- c("a","b","c","d","e")
df2 <- as.data.frame(cbind(ID, order))

我尝试替换字符串,但它删除了我不想要的 0(例如:ID2[1] = 11)。

提前致谢!

【问题讨论】:

    标签: r replace character


    【解决方案1】:

    从基础 R 中使用 trimws

    trimws(c("001001","0001002","01003","001004","1005"),which = "left",whitespace = "0")
    #> [1] "1001" "1002" "1003" "1004" "1005"
    

    reprex package (v0.3.0) 于 2020 年 6 月 30 日创建

    【讨论】:

      【解决方案2】:

      如果我们转换为整数或数字class,这样做会更容易,因为数字值不能有 0 前缀。转换后,如果我们需要类保持为character,只需用as.character包装即可

      df$ID <- as.character(as.integer(df$ID))
      df$ID
      #[1] "1001" "1002" "1003" "1004" "1005"
      

      也可以通过正则表达式的方式完成(虽然没有必要)

      df$ID <- sub("^0+", "", df$ID)
      

      在上面的代码中,我们在字符串的开头 (^) 匹配一个或多个 0 (0+) 并替换为空白 ("")

      如果 ID 包含数字以外的字符,则还可以选择捕获前缀 0 之后的数字并替换为捕获组的反向引用 (\\1)。这将确保字符串“0xyz”保持原样

      df$ID <- sub("^0+(\\d+)$", "\\1", df$ID)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-29
        • 2018-08-14
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        相关资源
        最近更新 更多