【发布时间】:2020-09-17 15:52:29
【问题描述】:
我有一个向量,它由可以取 1 到 100 之间任何值的数字组成。 我想将该向量分类到一定大小的箱中。
我的逻辑:
1.) 将范围(在本例中为 1:100)除以您想要的 bin 数量(在本例中假设为 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?
【问题讨论】:
-
您可以将
breaks指定为自定义值的向量。这样做的原因是基于代码breaks <- seq.int(rx[1L] - dx/1000, rx[2L] + dx/1000,,当中断的长度为1时 -
试试
cut(vector, breaks = 0:10 * 10) -
嗨艾伦,我有兴趣将范围 1:100,而不是 0:100,分成 10 个箱。否则,是的,这会起作用。
标签: r