Estoy de acuerdo con Joshua en que cut
es lo que mucha gente pensaría en esta tarea. No me gustan sus valores predeterminados, prefiero tener intervalos cerrados a la izquierda y es un dolor menor configurarlo correctamente con cut
(aunque se puede hacer. Afortunadamente para mi cerebro débil, Frank Harrell ha diseñado una función cut2
en Su paquete Hmisc prefiero los valores predeterminados. Una tercera alternativa es usar findInterval
, que es especialmente adecuado para problemas en los que desea utilizar el resultado como un índice para otras extracciones o procesos de selección. Sus resultados son más o menos lo que obtendría si aplicara as.numeric
a los resultados de cut
:
require(Hmisc)
cut2(dataset, c(1,4,9,17,23))
[1] [ 4, 9) [ 4, 9) [ 9,17) [ 1, 4) [ 9,17) [ 9,17) [17,23] [17,23] [ 1, 4) [ 9,17)
[11] [ 9,17) [ 9,17) [ 9,17) [17,23] [ 1, 4) [17,23] [ 9,17) [17,23]
(Tenga en cuenta que findInterval
utilizará el límite superior como el extremo cerrado para formar un intervalo extra a menos que cambie el máximo w ITH Inf
, una palabra reservada para el infinito en R.)
findInterval(dataset, c(c(1,4,9,17,23)))
[1] 2 2 3 1 3 3 4 4 1 3 3 3 3 4 1 5 3 4
as.numeric(cut(dataset, c(1,4,9,17,Inf), include.lowest=TRUE))
[1] 1 2 2 1 3 3 4 4 1 3 3 3 3 4 1 4 3 3
as.numeric(cut(dataset, c(1,4,9,17,23), include.lowest=TRUE))
[1] 1 2 2 1 3 3 4 4 1 3 3 3 3 4 1 4 3 3
Para llegar desde 'corte' al muerto las variables (que es lo que pidió el PO), trata de' model.matrix (~ bin-1, los datos = conjunto de datos) ' –