[英]Avoiding empty and small groups when using pretty_breaks with cut2
我與變量類似的數據工作val
下面創建值:
# data --------------------------------------------------------------------
data("mtcars")
val <- c(mtcars$wt, 10.55)
我以以下方式剪切此變量:
# Cuts --------------------------------------------------------------------
cut_breaks <- pretty_breaks(n = 10, eps.correct = 0)(val)
res <- cut2(x = val, cuts = cut_breaks)
產生以下結果:
> table(res)
res
[ 1, 2) [ 2, 3) [ 3, 4) [ 4, 5) [ 5, 6) 6 7 8 9 [10,11]
4 8 16 1 3 0 0 0 0 1
在創建的輸出中,我想更改以下內容:
為了方便起見,完整的代碼如下:
# Libs --------------------------------------------------------------------
Vectorize(require)(package = c("scales", "Hmisc"),
character.only = TRUE)
# data --------------------------------------------------------------------
data("mtcars") val <- c(mtcars$wt, 10.55)
# Cuts --------------------------------------------------------------------
cut_breaks <- pretty_breaks(n = 10, eps.correct = 0)(val) res <-
cut2(x = val, cuts = cut_breaks)
我試圖用玩eps.correct = 0
的值pretty_breaks
像代碼:
cut_breaks <- pretty_breaks(n = cuts, eps.correct = 0)(variable)
但沒有任何一個價值使我接近某個地方
我也嘗試過在cut2
函數中使用m= 5
參數,但我一直保持相同的結果。
我嘗試了mybreaks
函數,但我必須對它進行一些工作才能獲得更多精簡變量的有效削減。 從廣義上講, pretty_breaks
對我來說很合適,因為不希望出現不時出現的小團體。
> set.seed(1); require(scales)
> mybreaks <- function(x, n, r=0) {
+ unique(round(quantile(x, seq(0, 1, length=n+1)), r))
+ }
> x <- runif(n = 100)
> pretty_breaks(n = 5)(x)
[1] 0.0 0.2 0.4 0.6 0.8 1.0
> mybreaks(x = x, n = 5)
[1] 0 1
您可以使用quantile()
函數作為相對簡單的方法來在每個組中獲得相似數量的觀測值。
例如,這是一個函數,該函數采用值x
的向量,所需的組數n
和中斷所需的舍入點r
,並為您提供建議的切入點。
mybreaks <- function(x, n, r=0) {
unique(round(quantile(x, seq(0, 1, length=n+1)), r))
}
cut_breaks <- mybreaks(val, 5)
res <- cut(val, cut_breaks, include.lowest=TRUE)
table(res)
[2,3] (3,4] (4,11]
8 16 5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.