将 pretty_breaks 与 cut2 一起使用时避免空的和小的组

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)

我试过的

第一种方法

我尝试在 pretty_breaks 中使用 eps.correct = 0 值,就像在代码中一样:

cut_breaks <- pretty_breaks(n = cuts, eps.correct = 0)(variable)

但是 none 的值让我接近了

第二种方法

我也试过在 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