[英]How can I get cut2 to use commas?
我在庫Hmisc
使用R函數cut2
。 我給它一個數字向量,然后它變成相等大小的間隔:
library(Hmisc)
vals = c(100, 1000, 2000, 3000, 40000, 50000, 60000)
vals_cut = cut2(vals, g=3)
vals_cut
[1] [ 100, 3000) [ 100, 3000) [ 100, 3000) [ 3000,50000) [ 3000,50000) [50000,60000] [50000,60000]
Levels: [ 100, 3000) [ 3000,50000) [50000,60000]
當我嘗試與其他人共享圖像時(例如在統計圖形上)使用vals_cut
時會出現問題。 人們發現輸出很難閱讀,因為a)數字沒有逗號,b)逗號與第二個數字的開頭之間沒有空格。
我找不到cut2會以這種方式修改輸出的任何選項。 誰能推薦一個簡單的方法來做到這一點? 謝謝。
例:
library(Hmisc)
vals <- c(100, 1000, 2000, 3000, 40000, 50000, 60000)
vals_cut = cut2(vals, g=3)
vals_cut
這基本上有效; 您可能需要進行外觀調整。
library(stringr)
trans_level <- function(x,nsep=" to ") {
n <- str_extract_all(x,"\\d+")[[1]] ## extract numbers
v <- format(as.numeric(n),big.mark=",",trim=TRUE) ## change format
x <- as.character(x)
paste0(
substring(x, 1, 1),
paste(v,collapse=nsep),
substring(x, nchar(x), nchar(x))) ## recombine
}
vals_cut2 <- vals_cut
levels(vals_cut2) <- sapply(levels(vals_cut),trans_level)
vals_cut2
[1] [100 to 3,000) [100 to 3,000) [100 to 3,000) [3,000 to 50,000) [3,000 to 50,000) [50,000 to 60,000] [50,000 to 60,000]
Levels: [100 to 3,000) [3,000 to 50,000) [50,000 to 60,000]
這是一個僅用於格式化間隔級別的功能:
formatInterval <- function(x, intsep=", ") {
if (length(x) > 1) {
sapply(x, formatInterval, intsep=intsep)
} else {
makePretty <- function(z) {
prettyNum(gsub("[^0-9]", "", z), big.mark=",")
}
bracket1 <- substr(x, 1, 1)
bracket2 <- substr(x, nchar(x), nchar(x))
x2 <- strsplit(x, ",")
paste(bracket1,
makePretty(x2[[1]][1]),
intsep,
makePretty(x2[[1]][2]),
bracket2,
sep="")
}
}
現在
> levels(vals_cut) <- formatInterval(levels(vals_cut))
> vals_cut
[1] [100, 3,000) [100, 3,000) [100, 3,000) [3,000, 50,000) [3,000, 50,000) [50,000, 60,000]
[7] [50,000, 60,000]
Levels: [100, 3,000) [3,000, 50,000) [50,000, 60,000]
或者這看起來更好
> formatInterval(levels(vals_cut), intsep=" - ")
[ 100, 3000) [ 3000,50000) [50000,60000]
"[100 - 3,000)" "[3,000 - 50,000)" "[50,000 - 60,000]"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.