【问题标题】:Extract valid numbers from character vector in R从R中的字符向量中提取有效数字
【发布时间】:2022-10-15 15:50:18
【问题描述】:

假设我有以下字符向量

c("hi", "4", "-21", "6.5", "7. 5", "-2.2", "4h")

现在我只想提取上述向量中的有效数字:

c("4", "-21", "6.5", "-2.2")

注意:中间有一个空格。 7. 5 中的 5 是无效数字。

我正在尝试使用正则表达式/^-?(0|[1-9]\\d*)(\\.\\d+)?$/,它给出了here,但没有运气。

那么从字符向量中提取有效数字的正则表达式是什么?

【问题讨论】:

    标签: r regex numbers


    【解决方案1】:

    as.numeric 已经在这方面做得很好。任何有效数字都可以成功强制转换为数字,其他都是NA

    x = c("hi", "4", "-21", "6.5", "7. 5", "-2.2", "4h")
    y = as.numeric(x)
    y = y[!is.na(y)]
    y
    # [1]   4.0 -21.0   6.5  -2.2
    

    【讨论】:

      【解决方案2】:

      我们可以使用grep 匹配从字符串开头(^)到结尾($)的数字与.

      grep("^-?[0-9.]+$", v1, value = TRUE)
      [1] "4"    "-21"  "6.5"  "-2.2"
      

      或者对于边缘情况

      grep("^[ -]?[0-9]+(\.\d+)?$", c(v1, "4.1.1"), value = TRUE)
      [1] "4"    "-21"  "6.5"  "-2.2"
      
      grep("^[ -]?[0-9]+(\.\d+)?$", c(v1, "4.1.1", " 2.9"), value = TRUE)
      [1] "4"    "-21"  "6.5"  "-2.2" " 2.9"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-17
        • 1970-01-01
        • 2013-01-10
        • 1970-01-01
        • 2017-02-19
        • 1970-01-01
        相关资源
        最近更新 更多