在R中如何舍入切割函数中的标签

在R中如何舍入切割函数中的标签,r,cut,binning,R,Cut,Binning,我试图使用dig.lab参数从R中的cut函数取整我的标签。我给出的值为20,但我在标签中的数字后面有很多小数位,例如(114126.3000000000017465248999)。如果我将dig.lab的值减少到5,则标签以科学符号表示,例如(1.1413e+05,5.249e+06) 我想把它四舍五入,限制在小数点后4位,没有科学的记数法,有什么建议吗?虽然我认为这是对的,但还是这样。请注意,在测试示例中,我没有触及cut的输出 newLabels <- function(x, dig

我试图使用dig.lab参数从R中的cut函数取整我的标签。我给出的值为20,但我在标签中的数字后面有很多小数位,例如(114126.3000000000017465248999)。如果我将dig.lab的值减少到5,则标签以科学符号表示,例如(1.1413e+05,5.249e+06)

我想把它四舍五入,限制在小数点后4位,没有科学的记数法,有什么建议吗?

虽然我认为这是对的,但还是这样。请注意,在测试示例中,我没有触及
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]"

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