查找范围以创建统一直方图

时间:2014-10-23 13:20:49

标签: sql r statistics

我需要找到范围才能创建统一直方图

即:年龄 到4个范围

data_set = [18,21,22,24,27,27,28,29,30,32,33,33,42,42,45,46]

是否有一个函数给我范围,所以直方图是均匀的?

在这种情况下

ranges = [(18,24), (27,29), (30,33), (42,46)]

这个例子很简单,我想知道是否有一个处理复杂数据集的算法

感谢

1 个答案:

答案 0 :(得分:0)

您正在寻找平均分配数据的分位数。结合cut应该可行。所以,假设你想要n组。

set.seed(1)  
x <- rnorm(1000)  # Generate some toy data
n <- 10
uniform <- cut(x, c(-Inf, quantile(x, prob = (1:(n-1))/n), Inf)) # Determine the groups
plot(uniform)

Imgur

编辑:现在已更正以在结尾处产生正确的剪切。

Edit2:我不太了解downvote。但这也适用于您的示例:

data_set = c(18,21,22,24,27,27,28,29,30,32,33,33,42,42,45,46)
n <- 4
groups <- cut(data_set, breaks = c(-Inf, quantile(data_set, prob = 1:(n-1)/n), Inf))
levels(groups)

有一些小的重命名nessesary。对于稍微好一些的级别名称,您还可以使用min(x)max(x)代替-InfInf