如何将向量分成 R 中具有相同数量观察值的组?

How to cut a vector into groups with equal number of observations in R?

如何在 R 中将向量分成包含大致相等数量的观察值的组?我还需要知道切割点值是多少,以便对未来的输入进行分类。

所以基本上,我试图将连续变量转换为分类变量,每个类别中的观察值数量相等。我需要知道每个类别的边界。请帮忙。

例如:

bla <- c(1,2,3,4,5,6,7,8,9,10,11,12)
blaClass <- cut(bla, 3)

每个 blaClass 包含相等数量的观察值。但问题是我有很多观测值彼此非常接近,甚至具有相同的值,因此很难将它们分成具有相同观测值的组。

我尝试使用 quantileCut,但出现“中断不唯一”错误。

您可以使用dplyr::ntile()将它们分割成分位数。例如,

ntile(bla,3)
 [1] 1 1 1 1 2 2 2 2 3 3 3 3

将它们平均削减 q(1/3)q(2/3)

我认为 cut 已经按照您的预期工作,返回的标签不容易阅读。您可以使用 labels = FALSE

关闭标签
bla <- c(1,2,3,4,5,6,7,8,9,10,11,12)
blaClass <- cut(bla, 3, labels = FALSE)
blaClass
#[1] 1 1 1 1 2 2 2 2 3 3 3 3

使用我的 santoku 包:

library(santoku)
bla <- c(1,2,3,4,5,6,7,8,9,10,11,12)
chop_equally(bla, 3)

也适用于许多靠在一起的数字:

bla <- rep(1:5, 5) + rnorm(25)/1e8
table(chop_equally(bla, 5, lbl_intervals(raw = TRUE)))

##  [1, 1.8) [1.8, 2.6) [2.6, 3.4) [3.4, 4.2)   [4.2, 5] 
##         5          5          5          5          5