#r
#r
Вопрос:
Я хотел бы создать категориальную переменную, которая присваивает каждое значение ячейке. Итак, для таких данных, как:
x <- floor(runif(50,0,40))
Категории будут:
g1 <- (x >= 0) amp; (x<= 10)
g2 <- (x >= 11) amp; (x<= 20)
g3 <- (x >= 21) amp; (x<= 30)
g4 <- (x>= 31)
Затем переменная должна проверять x на наличие категорий и присваивать каждому наблюдению ячейку. Есть ли способ сделать это в одной переменной? Прошу прощения, если об этом спрашивали раньше, я ничего не смог найти по этому конкретному случаю.
Комментарии:
1. Вы можете использовать
cut
функцию.2.
cut(x, breaks = c(0,10,20,30,Inf), labels = c("g1","g2","g3","g4"), include.lowest = TRUE)
Ответ №1:
set.seed(42)
x <- floor(runif(50,0,40))
head(x)
# [1] 36 37 11 33 25 20
head(cut(x, c(0, 10, 20, 30, Inf), include.lowest = TRUE))
# [1] (30,Inf] (30,Inf] (10,20] (30,Inf] (20,30] (10,20]
# Levels: [0,10] (10,20] (20,30] (30,Inf]
head(cut(x, c(0, 10, 20, 30, Inf), labels = FALSE, include.lowest = TRUE))
# [1] 4 4 2 4 3 2
По умолчанию вам нужно указать factor
s (первый пример), что обычно подходит для большинства. Второй — если вместо этого вам нужен integer
… однако это имеет тот же эффект, поскольку все числа, находящиеся между (скажем) 0 и 10, имеют одинаковое значение из cut
(в данном случае 1
a).
В вашем случае, я думаю, вам нужны "g1"
метки, поэтому вместо labels=FALSE
укажите метки вручную (как только что предложил @Ben):
head(cut(x, c(0, 10, 20, 30, Inf), labels = paste0("g", 1:4), include.lowest = TRUE))
# [1] g4 g4 g2 g4 g3 g2
# Levels: g1 g2 g3 g4
Это также factor
(вы можете использовать as.character
, если предпочитаете).