Jesús Para Fernández
2018-Jun-25 16:37 UTC
[R-es] Transformar muchas variables factor en variables binarias de acuerdo a niveles
Por cierto data.table tiene implementadas las funciones de reshape2 melt y dcast pero mucho m?s r?pidasen ejecuci?n Obtener Outlook para Android<https://aka.ms/ghei36> ________________________________ From: R-help-es <r-help-es-bounces en r-project.org> on behalf of V?ctor Granda Garc?a <victorgrandagarcia en gmail.com> Sent: Monday, June 25, 2018 4:23:52 PM To: Fernando Reche Lorite Cc: r-help-es Subject: Re: [R-es] Transformar muchas variables factor en variables binarias de acuerdo a niveles En esta respuesta: https://stackoverflow.com/a/35663834/2301674 tienes como hacerlo (mucho m?s sencillo que en la que enlazas t?) con reshape2 o si prefieres la versi?n "tidy" con dplyr y tidyr (la que yo recomiendo, pero solo porque me gusta m?s). Espero que te sirva On Mon, 25 Jun 2018 at 16:08 Fernando Reche Lorite via R-help-es < r-help-es en r-project.org> wrote:> Puedes probar con la funci?n dummy del paquete dummies. > > Un saludo > Fernando Reche Lorite > Departamento de Matem?ticas > Universidad de Almer?a > > El 25 de junio de 2018, 15:55, Carlos J. Gil Bellosta < > cgb en datanalytics.com> > escribi?: > > > ?No te vale model.matrix? > > > > El lun., 25 jun. 2018 a las 15:49, Juan Abasolo (<juan.abasolo en ehu.eus>) > > escribi?: > > > > > Buenas, compa?eros. > > > > > > Tengo una base de datos con bastantes variables todas medidas como > > factor, > > > quiero que todos los factores pasen a ser variables binarias en funci?n > > de > > > sus valores. > > > > > > En este ejemplo de Stackoverflow muestran como hacerlo con una > variable: > > > > > > https://stackoverflow.com/questions/33990760/converting- > > factors-to-binary-in-r > > > > > > df <-data.frame(a = c(1,2,3), b = c(1,1,2), c > > > c("Rose","Pink","Red"), d = c(2,3,4)) > > > > > > cbind(df[1:2], sapply(levels(df$c), function(x) as.integer(x == df$c)), > > > df[4]) > > > > > > o as? > > > > > > library(data.table) > > > setDT(df)[, c(levels(df$c), "c") :> > > c(lapply(levels(c), function(x) as.integer(x == c)), .(NULL))] > > > > > > > > > Pero no me resuelve el tener que hacerlo algunos cientos de veces, que > es > > > lo que querr?a evitar. S? que es evidente c?mo se tiene que hacer, pero > > soy > > > ciego a esa evidencia :-( > > > > > > Muchas gracias por la ayuda > > > > > > > > > -- > > > Juan Abasolo > > > > > > Hizkuntzaren eta Literaturaren Didaktika Saila > > > Bilboko Hezkuntza Fakultatea > > > Euskal Herriko Unibertsitatea > > > UPV/EHU > > > > > > Sarriena auzoa z/g > > > 48940 Leioa > > > Bizkaia > > > > > > [[alternative HTML version deleted]] > > > > > > _______________________________________________ > > > R-help-es mailing list > > > R-help-es en r-project.org > > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > > > [[alternative HTML version deleted]] > > > > _______________________________________________ > > R-help-es mailing list > > R-help-es en r-project.org > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > [[alternative HTML version deleted]] > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >-- *V?ctor Granda Garc?a* Data Technician v.granda en creaf.uab.cat Tel. +34 93 581 33 53 Campus UAB. Edifici C. 08193 Bellaterra (Barcelona) | *www.creaf.cat* <http://www.creaf.uab.es/cat/index.htm> Abans d'imprimir aquest missatge electr?nic penseu en el medi ambient. [[alternative HTML version deleted]] _______________________________________________ R-help-es mailing list R-help-es en r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es [[alternative HTML version deleted]]
Marcelino de la Cruz Rot
2018-Jun-25 17:36 UTC
[R-es] Transformar muchas variables factor en variables binarias de acuerdo a niveles
# Hola # Si te he entendido bien, lo que quieres hacer es lo mismo que hace R # cuando genera la model.matrix de un modelo lineal, # así que suponiendo que tienes esta data.frame: df <-data.frame(a = c(1,2,3), b = c(1,1,2), c c("Rose","Pink","Red"), d = c("a","b","c"), e=c("red","blue", "green")) df # y sabiendo el nombre de las variables de tipo factor # que quieres "binarizar", podrías hacer simplemente variables<-c("c", "d", "e") df2<-NULL for(i in variables){ mm<- model.matrix(lm((1:dim(df)[1])~get(i)-1, data=df)) dimnames(mm)[[2]] <- levels(df[,i]) df2<-cbind(df2,mm)} df2 # Saludos # Marcelino El 25/06/2018 a las 18:37, Jesús Para Fernández escribió:> Por cierto data.table tiene implementadas las funciones de reshape2 melt y dcast pero mucho m?s r?pidasen ejecuci?n > > Obtener Outlook para Android<https://aka.ms/ghei36> > > ________________________________ > From: R-help-es <r-help-es-bounces en r-project.org> on behalf of V?ctor Granda Garc?a <victorgrandagarcia en gmail.com> > Sent: Monday, June 25, 2018 4:23:52 PM > To: Fernando Reche Lorite > Cc: r-help-es > Subject: Re: [R-es] Transformar muchas variables factor en variables binarias de acuerdo a niveles > > En esta respuesta: https://stackoverflow.com/a/35663834/2301674 > > tienes como hacerlo (mucho m?s sencillo que en la que enlazas t?) con > reshape2 o si prefieres la versi?n "tidy" con dplyr y tidyr (la que yo > recomiendo, pero solo porque me gusta m?s). > > Espero que te sirva > > On Mon, 25 Jun 2018 at 16:08 Fernando Reche Lorite via R-help-es < > r-help-es en r-project.org> wrote: > >> Puedes probar con la funci?n dummy del paquete dummies. >> >> Un saludo >> Fernando Reche Lorite >> Departamento de Matem?ticas >> Universidad de Almer?a >> >> El 25 de junio de 2018, 15:55, Carlos J. Gil Bellosta < >> cgb en datanalytics.com> >> escribi?: >> >>> ?No te vale model.matrix? >>> >>> El lun., 25 jun. 2018 a las 15:49, Juan Abasolo (<juan.abasolo en ehu.eus>) >>> escribi?: >>> >>>> Buenas, compa?eros. >>>> >>>> Tengo una base de datos con bastantes variables todas medidas como >>> factor, >>>> quiero que todos los factores pasen a ser variables binarias en funci?n >>> de >>>> sus valores. >>>> >>>> En este ejemplo de Stackoverflow muestran como hacerlo con una >> variable: >>>> https://stackoverflow.com/questions/33990760/converting- >>> factors-to-binary-in-r >>>> df <-data.frame(a = c(1,2,3), b = c(1,1,2), c >>>> c("Rose","Pink","Red"), d = c(2,3,4)) >>>> >>>> cbind(df[1:2], sapply(levels(df$c), function(x) as.integer(x == df$c)), >>>> df[4]) >>>> >>>> o as? >>>> >>>> library(data.table) >>>> setDT(df)[, c(levels(df$c), "c") :>>>> c(lapply(levels(c), function(x) as.integer(x == c)), .(NULL))] >>>> >>>> >>>> Pero no me resuelve el tener que hacerlo algunos cientos de veces, que >> es >>>> lo que querr?a evitar. S? que es evidente c?mo se tiene que hacer, pero >>> soy >>>> ciego a esa evidencia :-( >>>> >>>> Muchas gracias por la ayuda >>>> >>>> >>>> -- >>>> Juan Abasolo >>>> >>>> Hizkuntzaren eta Literaturaren Didaktika Saila >>>> Bilboko Hezkuntza Fakultatea >>>> Euskal Herriko Unibertsitatea >>>> UPV/EHU >>>> >>>> Sarriena auzoa z/g >>>> 48940 Leioa >>>> Bizkaia >>>> >>>> [[alternative HTML version deleted]] >>>> >>>> _______________________________________________ >>>> R-help-es mailing list >>>> R-help-es en r-project.org >>>> https://stat.ethz.ch/mailman/listinfo/r-help-es >>>> >>> [[alternative HTML version deleted]] >>> >>> _______________________________________________ >>> R-help-es mailing list >>> R-help-es en r-project.org >>> https://stat.ethz.ch/mailman/listinfo/r-help-es >>> >> [[alternative HTML version deleted]] >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es en r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> > -- > *V?ctor Granda Garc?a* > Data Technician > > > v.granda en creaf.uab.cat > Tel. +34 93 581 33 53 > > > Campus UAB. Edifici C. 08193 Bellaterra (Barcelona) | *www.creaf.cat* > <http://www.creaf.uab.es/cat/index.htm> > > Abans d'imprimir aquest missatge electr?nic penseu en el medi ambient. > > [[alternative HTML version deleted]] > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > > [[alternative HTML version deleted]] > > > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es-- Marcelino de la Cruz Rot Depto. de Biología y Geología Física y Química Inorgánica Universidad Rey Juan Carlos Móstoles España
Carlos Ortega
2018-Jun-25 20:47 UTC
[R-es] Transformar muchas variables factor en variables binarias de acuerdo a niveles
Hola, Aunque llego un poco tarde.... - El nuevo paquete de Max Kuhn, "recipes" tiene un transformador justo para esto, simplemente tienes que indicar las columnas en las que aplicar. - Viñeta: https://cloud.r-project.org/web/packages/recipes/vignettes/Dummies.html - Y acaba de salir otro paquete para esto justamente (fastDummies): - Viñeta: https://cloud.r-project.org/web/packages/fastDummies/vignettes/making-dummy-variables.html Saludos, Carlos Ortega www.qualityexcellence.es El 25 de junio de 2018, 19:36, Marcelino de la Cruz Rot < marcelino.delacruz en urjc.es> escribió:> # Hola > # Si te he entendido bien, lo que quieres hacer es lo mismo que hace R > # cuando genera la model.matrix de un modelo lineal, > # así que suponiendo que tienes esta data.frame: > > > df <-data.frame(a = c(1,2,3), b = c(1,1,2), c > c("Rose","Pink","Red"), d = c("a","b","c"), e=c("red","blue", "green")) > > df > > # y sabiendo el nombre de las variables de tipo factor > # que quieres "binarizar", podrías hacer simplemente > > variables<-c("c", "d", "e") > > df2<-NULL > for(i in variables){ > mm<- model.matrix(lm((1:dim(df)[1])~get(i)-1, data=df)) > dimnames(mm)[[2]] <- levels(df[,i]) > df2<-cbind(df2,mm)} > > df2 > > # Saludos > # Marcelino > > > > El 25/06/2018 a las 18:37, Jesús Para Fernández escribió: > >> Por cierto data.table tiene implementadas las funciones de reshape2 melt >> y dcast pero mucho m?s r?pidasen ejecuci?n >> >> Obtener Outlook para Android<https://aka.ms/ghei36> >> >> ________________________________ >> From: R-help-es <r-help-es-bounces en r-project.org> on behalf of V?ctor >> Granda Garc?a <victorgrandagarcia en gmail.com> >> Sent: Monday, June 25, 2018 4:23:52 PM >> To: Fernando Reche Lorite >> Cc: r-help-es >> Subject: Re: [R-es] Transformar muchas variables factor en variables >> binarias de acuerdo a niveles >> >> En esta respuesta: https://stackoverflow.com/a/35663834/2301674 >> >> tienes como hacerlo (mucho m?s sencillo que en la que enlazas t?) con >> reshape2 o si prefieres la versi?n "tidy" con dplyr y tidyr (la que yo >> recomiendo, pero solo porque me gusta m?s). >> >> Espero que te sirva >> >> On Mon, 25 Jun 2018 at 16:08 Fernando Reche Lorite via R-help-es < >> r-help-es en r-project.org> wrote: >> >> Puedes probar con la funci?n dummy del paquete dummies. >>> >>> Un saludo >>> Fernando Reche Lorite >>> Departamento de Matem?ticas >>> Universidad de Almer?a >>> >>> El 25 de junio de 2018, 15:55, Carlos J. Gil Bellosta < >>> cgb en datanalytics.com> >>> escribi?: >>> >>> ?No te vale model.matrix? >>>> >>>> El lun., 25 jun. 2018 a las 15:49, Juan Abasolo (<juan.abasolo en ehu.eus >>>> >) >>>> escribi?: >>>> >>>> Buenas, compa?eros. >>>>> >>>>> Tengo una base de datos con bastantes variables todas medidas como >>>>> >>>> factor, >>>> >>>>> quiero que todos los factores pasen a ser variables binarias en funci?n >>>>> >>>> de >>>> >>>>> sus valores. >>>>> >>>>> En este ejemplo de Stackoverflow muestran como hacerlo con una >>>>> >>>> variable: >>> >>>> https://stackoverflow.com/questions/33990760/converting- >>>>> >>>> factors-to-binary-in-r >>>> >>>>> df <-data.frame(a = c(1,2,3), b = c(1,1,2), c >>>>> c("Rose","Pink","Red"), d = c(2,3,4)) >>>>> >>>>> cbind(df[1:2], sapply(levels(df$c), function(x) as.integer(x == df$c)), >>>>> df[4]) >>>>> >>>>> o as? >>>>> >>>>> library(data.table) >>>>> setDT(df)[, c(levels(df$c), "c") :>>>>> c(lapply(levels(c), function(x) as.integer(x == c)), .(NULL))] >>>>> >>>>> >>>>> Pero no me resuelve el tener que hacerlo algunos cientos de veces, que >>>>> >>>> es >>> >>>> lo que querr?a evitar. S? que es evidente c?mo se tiene que hacer, pero >>>>> >>>> soy >>>> >>>>> ciego a esa evidencia :-( >>>>> >>>>> Muchas gracias por la ayuda >>>>> >>>>> >>>>> -- >>>>> Juan Abasolo >>>>> >>>>> Hizkuntzaren eta Literaturaren Didaktika Saila >>>>> Bilboko Hezkuntza Fakultatea >>>>> Euskal Herriko Unibertsitatea >>>>> UPV/EHU >>>>> >>>>> Sarriena auzoa z/g >>>>> 48940 Leioa >>>>> Bizkaia >>>>> >>>>> [[alternative HTML version deleted]] >>>>> >>>>> _______________________________________________ >>>>> R-help-es mailing list >>>>> R-help-es en r-project.org >>>>> https://stat.ethz.ch/mailman/listinfo/r-help-es >>>>> >>>>> [[alternative HTML version deleted]] >>>> >>>> _______________________________________________ >>>> R-help-es mailing list >>>> R-help-es en r-project.org >>>> https://stat.ethz.ch/mailman/listinfo/r-help-es >>>> >>>> [[alternative HTML version deleted]] >>> >>> _______________________________________________ >>> R-help-es mailing list >>> R-help-es en r-project.org >>> https://stat.ethz.ch/mailman/listinfo/r-help-es >>> >>> -- >> *V?ctor Granda Garc?a* >> Data Technician >> >> >> v.granda en creaf.uab.cat >> Tel. +34 93 581 33 53 >> >> >> Campus UAB. Edifici C. 08193 Bellaterra (Barcelona) | *www.creaf.cat* >> <http://www.creaf.uab.es/cat/index.htm> >> >> Abans d'imprimir aquest missatge electr?nic penseu en el medi ambient. >> >> [[alternative HTML version deleted]] >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es en r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> >> [[alternative HTML version deleted]] >> >> >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es en r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> > > > -- > Marcelino de la Cruz Rot > Depto. de Biología y Geología > Física y Química Inorgánica > Universidad Rey Juan Carlos > Móstoles España > > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]