【问题标题】:How to get the fist digit of a number [duplicate]如何获取数字的第一位[重复]
【发布时间】:2021-02-04 09:30:51
【问题描述】:

我想获取 R 语言中数字的第一个数字(即左边的数字)。我该怎么做?

532648 → 5
874 → 8
3897 → 3

【问题讨论】:

    标签: r


    【解决方案1】:

    您正在查看的数字是十进制的,即以 10 为底。要获得此类数字的 幅度(即以 10 为底的位数),请使用 log10功能:

    x =  c(532648, 874, 3897)
    floor(log10(x))
    # [1] 5 2 3
    

    现在您可以使用幅度来获取最重要的数字:

    as.integer(x / 10 ^ floor(log10(x)))
    # [1] 5 8 3
    

    请注意,如果输入为 0,这将失败,因为 log(0) 未定义(或 -∞)。

    要针对非正数(0 或负数)输入验证代码,请使用以下代码:

    most_significant_digit = function (x) {
        magnitude = floor(log10(abs(x)))
        as.integer(x / 10 ^ ifelse(is.infinite(magnitude), 1, magnitude))
    }
    

    【讨论】:

      【解决方案2】:

      我们可以使用substr

      as.integer(substr(v1, 1, 1))
      #[1] 5 8 3
      

      数据

      v1 <- c(532648, 874, 3897)
      

      【讨论】:

      • 负数呢?这将返回 NA
      • @camille 帖子中没有提到。此外,floor(log10(x)) 的另一个答案返回 NaN
      猜你喜欢
      • 2022-07-05
      • 2017-02-10
      • 2011-02-27
      • 1970-01-01
      • 2019-11-26
      • 2017-03-04
      • 1970-01-01
      • 2021-08-25
      • 1970-01-01
      相关资源
      最近更新 更多