首页 > 解决方案 > 如何将向量分类到R中的bin中?

问题描述

我有一个由可以取 1 到 100 之间的任何值的数字组成的向量。我想将该向量分类到一定大小的 bin 中。

我的逻辑:

1.)将范围(在本例中为 1:100)划分为您想要的垃圾箱数量(本例中为 10)

结果:(1, 10.9], 10.9,20.8], (20.8,30.7], (30.7,40.6], (40.6,50.5], (50.5,60.4], (60.4,70.3], (70.3,80.2], ( 80.2,90.1], (90.1,100]

2.) 然后对我的向量进行排序


我发现了一个方便的功能,几乎可以一口气完成所有这些:cut(). 这是我的代码:

> table(cut(vector, breaks = 10))

(0.959,10.9]  (10.9,20.8]  (20.8,30.7]  (30.7,40.5]  (40.5,50.4]  (50.4,60.3]  (60.3,70.1]    (70.1,80]    (80,89.9]  (89.9,99.8] 
         175          171          117          103           82           67           54           46           39           31 

不幸的是,间隔与我们从可能范围 (1:100) 计算的区间不同。因此,我尝试通过将该范围添加到向量中来解决此问题:

> table(cut(c(1,100,vector), breaks = 10))

(0.901,10.9]  (10.9,20.8]  (20.8,30.7]  (30.7,40.6]  (40.6,50.5]  (50.5,60.4]  (60.4,70.3]  (70.3,80.2]  (80.2,90.1]   (90.1,100] 
         176          171          117          104           82           66           54           48           38           31

除了出于某种原因从 0.901 开始的最左边的间隔之外,这几乎可以完美运行。


我的问题:

1.) 有没有办法做到这一点(使用 cut 或其他函数/包)而不必插入人工数据点来获得指定的 bin 范围?

2.) 如果不是,为什么较低的 bin 从 0.901 而不是 1 开始?

标签: r

解决方案


根据您对@Allan Cameron 的回复,我知道您想将您vector的物品分成 10 个相同大小的箱子。但是,当您在函数中定义此中断数时,cut()函数计算的间隔大小在各个组中是不同的。正如@akrun 悲伤的那样,这是因为函数在这种情况下使用的微积分方法,您只定义了中断的数量。

我不知道是否有办法在函数中避免这种情况。但我认为如果你按照@Gregor Thomas 的建议定义你想要的垃圾箱会更容易。这是我将如何满足您的愿望的示例:

vec <- sample(1:100, size = 500, replace = T)

# Here I suppose that you want to divide the data in
# intervals of the same length
breaks <- seq(min(vec), max(vec), by = 9.9)

cut(vec, breaks = breaks)

其他选项,将是包中的cut_interval()函数ggplot2,该函数将向量分成 n 个具有相同长度的组。

library(ggplot2)

cut_interval(vec, n = 10)

推荐阅读