我正在尝试使用dig.lab参数从R中的cut函数取整标签。我给定的值为20,但在标签中的数字后得到很多小数位,例如(114126.30000000001746,5248999]。如果我将dig.lab的值减小到5,则标签会以科学计数法表示,例如(1.1413e + 05,5.249e + 06]
我想四舍五入并限制在小数点后4位,没有科学计数法,有什么建议吗?
答案 0 :(得分:0)
尽管我相信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(u))
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]"