我正在处理类似于下面创建的数据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)
但是没有一个值让我到处都很近
我也尝试在m= 5
函数中使用cut2
参数,但我会继续得到相同的结果。
我尝试了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
答案 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