【问题标题】:How to round off labels in cut function in R如何在R中的cut函数中四舍五入标签
【发布时间】:2019-12-03 18:22:15
【问题描述】:

我正在尝试使用 dig.lab 参数从 R 中的 cut 函数中舍入我的标签。我将值设为 20,但标签中的数字后有很多小数位,例如(114126.30000000001746,5248999] 。如果我将 dig.lab 的值减小到 5,则标签以科学记数法表示,例如 (1.1413e+05,5.249e+06]

我想将其四舍五入并限制为 4 位小数,没有科学记数法,有什么建议吗?

【问题讨论】:

  • 当您cut 时,它似乎将值更改为因子。我要做的是将这些改回数字,然后我将使用 round 函数,小数点后 4 位。
  • 您真的需要小数位(4 位或其他)吗?整数断点可以吗?
  • @RuiBarradas 我想过,但我需要小数位。
  • @HanselPalencia 对不起,我不明白你的意思。 cut 函数的输出是标签格式,如 (114126.30000000001746,5248999] ,如何格式化这些?
  • 不确定,你可以试试正则表达式。删除所有非整数字符,然后删除 +4 之后的任何内容。

标签: r cut binning


【解决方案1】:

虽然我相信r2evans 是对的,但还是这样。请注意,在测试示例中,cut 的输出保持不变。

newLabels <- function(x, dig.lab = 4){
  lev <- levels(x)
  pattern <- paste0("^[\\(\\[][-]*\\d*\\.\\d{",
                    dig.lab,
                    "}|,[-]*\\d*\\.\\d{",
                    dig.lab,
                    "}"
  )
  m <- gregexpr(pattern = pattern, levels(x))
  y <- regmatches(lev, m)
  y <- sapply(y, paste, collapse = "")
  y <- paste0(y, substring(lev, nchar(lev)))
  y
}

set.seed(1234)
x <- runif(1000, 0, 6e6)
y <- cut(x, breaks = 10, dig.lab = 20)
z <- factor(y, labels = newLabels(y, dig.lab = 4))

levels(z)
#[1] "(-3942.8915,601427.6033]"    "(601427.6033,1200804.3310]" 
#[3] "(1200804.3310,1800181.0587]" "(1800181.0587,2399557.7864]"
#[5] "(2399557.7864,2998934.5141]" "(2998934.5141,3598311.2418]"
#[7] "(3598311.2418,4197687.9694]" "(4197687.9694,4797064.6971]"
#[9] "(4797064.6971,5396441.4248]" "(5396441.4248,6001811.9198]"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多