我需要找到范围才能创建统一直方图
即:年龄 到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)]
这个例子很简单,我想知道是否有一个处理复杂数据集的算法
感谢
答案 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)
编辑:现在已更正以在结尾处产生正确的剪切。
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)
代替-Inf
和Inf
。