r - 如何将向量分类到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 开始?
解决方案
根据您对@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)
推荐阅读
- javascript - 更新 NGRX/Redux 存储中数组中对象的属性不起作用
- java - 如何使用递归打印数字的阶乘可视化
- swift - swift 实际上对结构做了什么复制省略?
- azure-active-directory - 使用 .NET SDK 从 Azure AD 验证服务主体名称 (SPN)
- python - 我的功能保存到泡菜不起作用
- python - 解释 HIDAPI python 输出
- css - 我怎样才能“撤消”大纲:无;不删除规则?
- bash - 使用 Ncat 模拟 TCP 客户端流量
- python - etree 元素上的 xpath 产生意外结果
- ios - Swift Firebase UICollectionView - 图像缩略图不一致