剪切功能创建了太多级别

Cut function creates too many levels

我有一个代表受教育年限的整数列表:

education= 12 14 17 15 12 19 16 12 16 14 12 18 12 13 18 18 10 13 12 18
22 16 13 22 12 15 12 16 18 18 18 20 18 16 13 12 16 13 18 20 20 20 14 18 
18 12 18 16 20 18 14 16 19 12 12 11 13 13    

我试图将年份分为 3 个不同的级别:

9-12 13-17 18+

我试过使用剪切功能:

edulevels=cut(education,c(9,12,13,17,18,22))

但它为 12-13 岁和 17-18 岁创造了 2 个额外的关卡:

Levels: (9,12] (12,13] (13,17] (17,18] (18,22]

如何让它只创建这三个级别?

最简单的解决方案

edulevels=  cut(education,c(9,12.5,17.5,22), labels = c("9-12", "13-17", "18+"))

cut()函数定义的区间在右侧闭合。要了解这意味着什么,试试这个:

cut(1:2, breaks=c(0,1,2))
# [1] (0,1] (1,2]

如您所见,整数 1 包含在 (0,1] 范围内,而不是 (1,2] 范围内。它不会被重复计算,并且对于落在您定义的 bin 之外的任何输入值,cut() 将 return 的值为 NA

在处理整数值数据时,我倾向于在整数之间设置断点,以免绊倒自己。

edulevels <- cut(education, 
   c(8.5, 12.5, 17.5, Inf),
   labels=c('9-12','13-17','18+')
   )