Hola a todos . ¿cómo puedo ordenar los niveles de un factor? Ejemplo > x<-c("0","0-9","10-49","50-99","100-199",">200") > dosis<-factor(rep(x,10)) > dosis [1] 0 0-9 10-49 50-99 100-199 >200 0 0-9 10-49 [10] 50-99 100-199 >200 0 0-9 10-49 50-99 100-199 >200 [19] 0 0-9 10-49 50-99 100-199 >200 0 0-9 10-49 [28] 50-99 100-199 >200 0 0-9 10-49 50-99 100-199 >200 [37] 0 0-9 10-49 50-99 100-199 >200 0 0-9 10-49 [46] 50-99 100-199 >200 0 0-9 10-49 50-99 100-199 >200 [55] 0 0-9 10-49 50-99 100-199 >200 *Levels: 0 0-9 100-199 10-49 >200 50-99 *Yo quiero que aparezcan ordenados según x. Gracias.
sort(dosis) saludos On 12 Jan 2010 17:58, "jose luis" <canadasreche@gmail.com> wrote: Hola a todos . ¿cómo puedo ordenar los niveles de un factor? Ejemplo> x<-c("0","0-9","10-49","50-99","100-199",">200") > dosis<-factor(rep(x,10)) > dosis[1] 0 0-9 10-49 50-99 100-199 >200 0 0-9 10-49 [10] 50-99 100-199 >200 0 0-9 10-49 50-99 100-199 >200 [19] 0 0-9 10-49 50-99 100-199 >200 0 0-9 10-49 [28] 50-99 100-199 >200 0 0-9 10-49 50-99 100-199 >200 [37] 0 0-9 10-49 50-99 100-199 >200 0 0-9 10-49 [46] 50-99 100-199 >200 0 0-9 10-49 50-99 100-199 >200 [55] 0 0-9 10-49 50-99 100-199 >200 *Levels: 0 0-9 100-199 10-49 >200 50-99 *Yo quiero que aparezcan ordenados según x. Gracias. _______________________________________________ R-help-es mailing list R-help-es@r-project.org stat.ethz.ch/mailman/listinfo/r-help-es [[alternative HTML version deleted]]
Hola Jose Luis. Aparecen ordenados según x (los niveles del factor). Como x es de tipo ''character'', el orden es alfabético. Lo que quieras, probablemente sea: dosis <- factor(rep(x,10), levels =c ("0", "0-9", "10-49", "50-99", "100-199", ">200"), ordered = T) Un saludo. El 12 de enero de 2010 18:03, Xavi de Blas <xaviblas@gmail.com> escribió:> sort(dosis) > > saludos > > On 12 Jan 2010 17:58, "jose luis" <canadasreche@gmail.com> wrote: > > Hola a todos . ¿cómo puedo ordenar los niveles de un factor? > > Ejemplo > > x<-c("0","0-9","10-49","50-99","100-199",">200") > > dosis<-factor(rep(x,10)) > > dosis > [1] 0 0-9 10-49 50-99 100-199 >200 0 0-9 10-49 > [10] 50-99 100-199 >200 0 0-9 10-49 50-99 100-199 >200 > [19] 0 0-9 10-49 50-99 100-199 >200 0 0-9 10-49 > [28] 50-99 100-199 >200 0 0-9 10-49 50-99 100-199 >200 > [37] 0 0-9 10-49 50-99 100-199 >200 0 0-9 10-49 > [46] 50-99 100-199 >200 0 0-9 10-49 50-99 100-199 >200 > [55] 0 0-9 10-49 50-99 100-199 >200 *Levels: 0 0-9 100-199 > 10-49 >200 50-99 > > *Yo quiero que aparezcan ordenados según x. > > Gracias. > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > stat.ethz.ch/mailman/listinfo/r-help-es > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > stat.ethz.ch/mailman/listinfo/r-help-es > >[[alternative HTML version deleted]]
Una manera fácil es escribir los niveles en el orden que quieras usando la función levels> levels(dosis)<-c("0","0-9","10-49","50-99","100-199",">200") > dosis[1] 0-9 10-49 50-99 >200 100-199 0 0-9 10-49 50-99 [10] >200 100-199 0 0-9 10-49 50-99 >200 100-199 0 [19] 0-9 10-49 50-99 >200 100-199 0 0-9 10-49 50-99 [28] >200 100-199 0 0-9 10-49 50-99 >200 100-199 0 [37] 0-9 10-49 50-99 >200 100-199 0 0-9 10-49 50-99 [46] >200 100-199 0 0-9 10-49 50-99 >200 100-199 0 [55] 0-9 10-49 50-99 >200 100-199 0 Levels: 0 0-9 10-49 50-99 100-199 >200 Saludos -- Luis Mariano Esteban Escaño Dpto. Matemática Aplicada Escuela Universitaria Politécnica de La Almunia C/ Mayor s/n 50100 La Almunia de Doña Godina Tlfno. 976600883 [[alternative HTML version deleted]]
Hola Juse Luis, No entiendo muy bien tu pregunta, si lo que quieres son los niveles de dosis, es decir levels( dosis ) ordenados según x, entonces puedes usar directamente x ... El motivo por el que no se te ordenan los niveles de forma automática según el orden numérico es porque los niveles son string, no númerico, por eso están ordenados así. Si lo que quieres es ordenar el objeto dosis, puedes hacer esto: sort( dosis, decreasing = FALSE ) pero de nuevo los elementos ">200" se toman como string. saludos El 12 de enero de 2010 17:58, jose luis <canadasreche@gmail.com> escribió:> Hola a todos . ¿cómo puedo ordenar los niveles de un factor? > > Ejemplo > > x<-c("0","0-9","10-49","50-99","100-199",">200") > > dosis<-factor(rep(x,10)) > > dosis > [1] 0 0-9 10-49 50-99 100-199 >200 0 0-9 10-49 > [10] 50-99 100-199 >200 0 0-9 10-49 50-99 100-199 >200 > [19] 0 0-9 10-49 50-99 100-199 >200 0 0-9 10-49 > [28] 50-99 100-199 >200 0 0-9 10-49 50-99 100-199 >200 > [37] 0 0-9 10-49 50-99 100-199 >200 0 0-9 10-49 > [46] 50-99 100-199 >200 0 0-9 10-49 50-99 100-199 >200 > [55] 0 0-9 10-49 50-99 100-199 >200 *Levels: 0 0-9 100-199 > 10-49 >200 50-99 > > *Yo quiero que aparezcan ordenados según x. > > Gracias. > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > stat.ethz.ch/mailman/listinfo/r-help-es >[[alternative HTML version deleted]]
Buenas tardes Jose Luis, Compara: R> y <- factor(rep(x,10)) R> od <- order(y, decreasing = FALSE) R> y[od] R> oi <- order(y, decreasing = TRUE) R> y[oi] R> factor(y, levels = x) Espero sea de utilidad, Jorge Ivan Velez 2010/1/12 jose luis <>> Hola a todos . ¿cómo puedo ordenar los niveles de un factor? > > Ejemplo > > x<-c("0","0-9","10-49","50-99","100-199",">200") > > dosis<-factor(rep(x,10)) > > dosis > [1] 0 0-9 10-49 50-99 100-199 >200 0 0-9 10-49 > [10] 50-99 100-199 >200 0 0-9 10-49 50-99 100-199 >200 > [19] 0 0-9 10-49 50-99 100-199 >200 0 0-9 10-49 > [28] 50-99 100-199 >200 0 0-9 10-49 50-99 100-199 >200 > [37] 0 0-9 10-49 50-99 100-199 >200 0 0-9 10-49 > [46] 50-99 100-199 >200 0 0-9 10-49 50-99 100-199 >200 > [55] 0 0-9 10-49 50-99 100-199 >200 *Levels: 0 0-9 100-199 > 10-49 >200 50-99 > > *Yo quiero que aparezcan ordenados según x. > > Gracias. > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > stat.ethz.ch/mailman/listinfo/r-help-es >[[alternative HTML version deleted]]
Gracias, era justo esto lo que necesitaba, además es interesante poder cambiar el orden de los niveles, para establecer diferentes categorías de referencia, por ejemplo para contrastar un modelo de regresión logística. Luis Mariano Esteban escribió:> > Una manera fácil es escribir los niveles en el orden que quieras > usando la función levels > > > levels(dosis)<-c("0","0-9","10-49","50-99","100-199",">200") > > dosis > [1] 0-9 10-49 50-99 >200 100-199 0 0-9 10-49 > 50-99 > [10] >200 100-199 0 0-9 10-49 50-99 >200 100-199 > 0 > [19] 0-9 10-49 50-99 >200 100-199 0 0-9 10-49 > 50-99 > [28] >200 100-199 0 0-9 10-49 50-99 >200 100-199 > 0 > [37] 0-9 10-49 50-99 >200 100-199 0 0-9 10-49 > 50-99 > [46] >200 100-199 0 0-9 10-49 50-99 >200 100-199 > 0 > [55] 0-9 10-49 50-99 >200 100-199 0 > Levels: 0 0-9 10-49 50-99 100-199 >200 > Saludos > > > > -- > Luis Mariano Esteban Escaño > Dpto. Matemática Aplicada > Escuela Universitaria Politécnica de La Almunia > C/ Mayor s/n 50100 La Almunia de Doña Godina > Tlfno. 976600883 >