【问题标题】:Format numeric to two-digits将数字格式化为两位数
【发布时间】:2020-10-12 02:21:44
【问题描述】:

我有一列数字类,例如:v <- c(12345, 2345, 7689900)

我知道每个数字实际上都是12.345, 23.45, 76.89900 的形式,即每个数字都有两个数字,其余的都是小数。

如何将矢量转换为这种格式?在此过程中不应裁剪任何小数。

【问题讨论】:

  • 输入1位或2位时会发生什么?

标签: r floating-point formatting decimal


【解决方案1】:

使用正则表达式,我们可以捕获由"." 分隔的两组数据。

sub('(..)(.*)', '\\1.\\2', v)
#[1] "12.345"   "23.45"    "76.89900"

如果您想对此执行一些操作,可以将其包装在 as.numeric 中。

【讨论】:

    【解决方案2】:

    如果您正在寻找数值向量,一个选项可能是:

    v/10^(nchar(v) - 2)
    
    [1] 12.345 23.450 76.899
    

    编辑:

    如果我们有超过 20 位数字,我们可以使用 log10Count the number of integer digits

    v/10^(floor(log10(abs(v))) + 1 - 2)
    

    【讨论】:

    • 请注意:nchar(1234567890123456789012345) 会给你 20 而不是 25。
    • @zx8754 感谢您的编辑,非常有趣:)
    • 没问题!由于这是一个公认的解决方案并且我从链接的帖子中窃取了这个想法,我不想再发布另一个答案。
    【解决方案3】:
    as.numeric(paste0(substring(v,1,2), ".", substring(v,3)))
    # [1] 12.345 23.450 76.899
    

    【讨论】:

      猜你喜欢
      • 2011-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      相关资源
      最近更新 更多