【问题标题】:cut2 splits into unequal bucketscut2 分成不等的桶
【发布时间】:2016-02-08 20:52:56
【问题描述】:

我目前正在做一些数据处理,并一直在寻找一种方法来创建每组中具有相同数量观察值的十分位数。我遇到了 Hmisc 包和 cut2 函数,并认为它应该通过指定 g=10 将数据分成 10 个桶,每个桶具有相同数量的观察值。然而,这个函数的输出有点偏离。我是否错误地使用了cut2?

我正在使用的代码:

library(Hmisc)
testdata <- data.frame(rating= c(8, 8,  8,  6,  8,  8,  8,  8,  8,  8,  8,  8,  8,  4,  8,  8,  8,  6,  8,  8,  8,  8,  6,  8,  6,  8,  4,  8,  8,  8,  6,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  4,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  6,  8,  8,  8,  8,  6,  6,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  6,  8,  6,  8,  8,  8,  8,  6,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  6,  8,  8,  8,  6,  8,  8,  6,  4,  8,  8,  8,  8,  8,  6,  8,  8,  8,  4,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  6,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  2,  8,  6,  8,  8,  8,  6,  8,  8,  6,  6,  8,  8,  6,  8,  8,  8,  8,  8,  8,  8,  8,  6,  8,  8,  8,  8,  8,  8,  8,  8,  8,  4,  8,  8,  8,  6,  8,  8,  6,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  4,  8,  6,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  6,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  6,  6,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  4,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  6,  8,  6,  8,  8,  8,  6,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  6,  8,  8,  8,  8,  8,  6,  8,  8,  8,  6)
,age=c(0,   0,  0,  0,  3,  4,  4,  4,  4,  6,  6,  6,  6,  6,  6,  7,  7,  7,  7,  8,  8,  8,  9,  9,  9,  9,  10, 10, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 30, 30, 30, 31, 31, 32, 32, 32, 32, 32, 32, 32, 32, 33, 33, 34, 34, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 39, 39, 39, 40, 40, 41, 41, 41, 41, 41, 41, 41, 41, 42, 42, 42, 42, 42, 42, 42, 43, 43, 43, 44, 44, 44, 44, 44, 44, 45, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 48, 48, 48, 54, 54, 54, 56, 56, 58, 59, 59, 59, 59, 60, 60, 60, 61, 66, 66, 70, 72))
cutcutcut <- cut2(testdata$age,g=10)
testtable <- table(cutcutcut)

以及每个桶中不相等观察的输出

testtable

 [ 0,13) [13,15) [15,20) [20,24) [24,26) [26,28) [28,33) [33,40) [40,46) [46,72] 
 46      16      35      28      33      35      26      31      31      28 

【问题讨论】:

    标签: r


    【解决方案1】:

    您的问题的答案在于查看数据的分布:

    table(testdata$age)
    #  0  3  4  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 
    #  4  1  4  6  4  3  4  2  2 16  9  7  5 10  6  7  7 13  4  2  9 
    # 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 
    # 23 10 18 17  8  5  3  2  8  2  2  5  9  5  5  3  2  8  7  3  6 
    # 45 46 47 48 54 56 58 59 60 61 66 70 72 
    #  5  4  3  3  3  2  1  4  3  1  2  1  1 
    

    我们看到,某些年龄段的人在该年龄段有很多(例如,12 岁的有 16 个人,24 岁的有 23 个人)。由于切割算法需要将所有年龄完全相同的个体放入同一个桶中,这可能会导致桶中出现一些不平衡。

    由于您的数据中总共有 309 个观察值,并且您要寻找 10 个桶,因此理想情况下,您希望其中 9 个桶中有 31 个观察值,最后一个桶中有 30 个。现在最后一个桶被定义为[46, 72],它包含28个元素(太少了)。如果将此扩展为[45, 72],它将包含 33 个元素(太多)。由于有 5 个元素的值为 45,因此无法拆分数据以在最后一个存储桶中准确获得 30 或 31 个观察值。

    【讨论】:

      猜你喜欢
      • 2011-08-20
      • 2016-10-02
      • 1970-01-01
      • 1970-01-01
      • 2021-03-26
      • 2014-08-16
      • 2020-11-02
      • 2019-12-20
      • 2020-11-06
      相关资源
      最近更新 更多