Категориальная переменная для хранения целых данных в r

#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 , если предпочитаете).