Интервалы, определенные функцией cut()
, (по умолчанию) закрыты справа. Чтобы увидеть, что это значит, попробуйте это:
cut(1:2, breaks=c(0,1,2))
# [1] (0,1] (1,2]
Как видите, целое число 1
входит в диапазон (0,1]
, а не в диапазон (1,2]
. Он не учитывается дважды, и для любого входного значения, выходящего за пределы заданных вами корзин, cut()
вернет значение NA
.
Имея дело с целочисленными данными, я стараюсь устанавливать точки останова между целыми числами, просто чтобы не запутаться. Фактически, если вы сделаете это с вашими данными (как показано ниже), вы обнаружите, что 2-й и 3-й столбцы были на самом деле неправильно названы, что прекрасно иллюстрирует эту точку!
LoginRange <- cut(NumLogin,
c(0.5, 1.5, 3.5, 5.5, 10.5, 15.5, 20.5, Inf),
# c(0,1,3,5,10,15,20,Inf) + 0.5,
labels=c('1','2-3','4-5','6-10','11-15','16-20','20+')
)