tl; dr , чтобы получить то, что вам может понадобиться, вам, вероятно, потребуется явно указать разрывы, и include.lowest=TRUE
:
cut(x,breaks=0:10,include.lowest=TRUE)
Проблема, вероятно, заключается в том, что «Детали» в ?cut
:
Когда «разрывы» заданы как одно число, диапазон данных делится на фрагменты «разрывов» одинаковой длины, а затем внешние пределы отклоняются на 0,1% диапазона, чтобы оба экстремальных значения попадали в интервалы перерыва.
Поскольку диапазон равен (0,10), внешние пределы (-0,01, 10.01 ); как предполагает @Onyambu, результаты являются асимметричными c, потому что значение в 0 лежит на левой границе (не включено), тогда как значение в 10 лежит на правой границе (включено).
(Очевидная) асимметрия происходит из-за форматирования; если вы будете следовать приведенному ниже коду (ядро base:::cut.default()
, вы увидите, что верхний разрыв на самом деле равен 10.01, но форматируется как «10», потому что число цифр по умолчанию - 3 ...
x <- 0:10
breaks <- 10
dig <- 3
nb <- as.integer(breaks+1)
dx <- diff(rx <- range(x, na.rm = TRUE))
breaks <- seq.int(rx[1L], rx[2L], length.out = nb)
breaks[c(1L, nb)] <- c(rx[1L] - dx/1000, rx[2L] + dx/1000)
ch.br <- formatC(0 + breaks, digits = dig, width = 1L)