#r
#r
Вопрос:
Итак, я изучал линейную регрессию и наткнулся на функцию cut. Я знаю, что по умолчанию разрывы закрыты справа (т. Е. (x-y]), а установка right=FALSE делает его закрытым слева (т. е. [x-y)). Есть ли способ сделать разрезы как с закрытыми (т.е. [x-y]), так и с открытыми (т.е. (x-y))? Я понимаю, что это, вероятно, непрактично, но мне просто любопытно получить ответ на этот вопрос.
Спасибо!
Ответ №1:
Короткий ответ — нет.
Чтобы понять это, мы должны вернуться к основанию cut
того, для чего предназначена функция:
cut
делит диапазонx
на интервалы и кодирует значения вx
соответствии с тем, в какой интервал они попадают. Крайний левый интервал соответствует первому уровню, следующий крайний левый — второму уровню и так далее.
Из: https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/cut
И что касается этой цели, каждый элемент x
должен принадлежать одной и только одной группе в определении cut. Особый случай, когда вы получили это [x-y] прямо из коробки, относится к первой группе, где у вас есть right=TRUE
amp; include.lowest=TRUE
. Кроме этого, это зависит от того, как вы интерпретируете группу или помечаете их.
x <- seq(1, 100, by = 1)
cut(x, breaks = c(1, 25, 50, 75, 100), include.lowest = TRUE, right = TRUE,
labels = c("[1, 25]", "[26, 50]", "[51, 75]", "[76, 100]"))
Создайте cut с этими уровнями — так, может быть, это то, что вы хотите? Вместо этого метки?
Levels: [1, 25] [26, 50] [51, 75] [76, 100]
Хотя это было бы правильным названием для случая со всеми целыми числами, но когда вы получаете действительное число с десятичными точками, тогда такие ручные метки, как это, уже не очень точны.
Ответ №2:
Если вам действительно нужны произвольные ограничения, вы можете использовать (мой) santoku
пакет:
library(santoku)
# left_vec is TRUE where a break is left-closed like ...)[...
# so this creates breaks like [-Inf, 1) [1, 2] (2, 3) [3, 4) [4, Inf ]
breaks <- brk_manual(1:4, left_vec = c(TRUE, FALSE, TRUE, TRUE))
x <- seq(0, 5, 0.5)
chopped <- chop(x, breaks, extend = TRUE)
data.frame(x, chopped)
что дает
x chopped
1 0.0 [-Inf, 1)
2 0.5 [-Inf, 1)
3 1.0 [1, 2]
4 1.5 [1, 2]
5 2.0 [1, 2]
6 2.5 (2, 3)
7 3.0 [3, 4)
8 3.5 [3, 4)
9 4.0 [4, Inf ]
10 4.5 [4, Inf ]
11 5.0 [4, Inf ]