Я думаю, cut
- лучший инструмент для этого.
С некоторыми примерами данных:
set.seed(123)
age <- round(runif(10,20,50))
Вот что я бы сделал:
> cut(age, c(0,30,40,Inf))
[1] (0,30] (40,Inf] (30,40] (40,Inf] (40,Inf] (0,30] (30,40] (40,Inf]
[9] (30,40] (30,40]
Levels: (0,30] (30,40] (40,Inf]
При желании можно установить метки факторов вручную:
> cut(age, c(0,30,40,Inf), labels=c('0-30', '31-40', '40+'))
[1] 0-30 40+ 31-40 40+ 40+ 0-30 31-40 40+ 31-40 31-40
Levels: 0-30 31-40 40+
Для сравнения, на связанной странице предлагается следующее:
> as.factor(ifelse(age<=30, '0-30', ifelse(age <= 40, '30-40', '40+')))
[1] 0-30 40+ 30-40 40+ 40+ 0-30 30-40 40+ 30-40 30-40
Levels: 0-30 30-40 40+