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]]