[R-es] crear variable en base a nombre de columnas que tienen un 1

José Luis Cañadas Reche canadasreche en gmail.com
Vie Abr 11 14:08:37 CEST 2014


Carlos, en principio si sería algo así, sólo que en vez de quedarme con 
todas las columnas var1 a var4 tuviera sólo 3, ya que en mis datos no 
hay ningún caso que tenga el valor 1 en más de 3 variables..

Había llegado a una solución (mucho menos elegante que usando reshape), 
que implicaba un for sobre las filas.

Jorge, creo que tu solución me vale.

Muchas gracias a los dos..

Saludos



El 11/04/14 13:49, Carlos J. Gil Bellosta escribió:
> ¿Algo así?
>
> var1 <- c(rep(0,3),rep(1,2))
> var2 <- c(rep(1,2),0,0,1)
> var3 <- c(rep(1,2),rep(0,3))
> var4 <- c(rep(1,2),rep(0,3))
> datos <- data.frame(fila=1:5,var1, var2, var3, var4)
>
> library(reshape2)
>
> tmp <- melt(datos, id.vars="fila")
>
> tmp$uno <- as.character(tmp$variable)
> tmp$uno[tmp$value != 1] <- "0"
>
> res <- dcast(tmp, fila ~ variable, value.var = "value")
> res <- dcast(tmp, fila ~ variable, value.var = "uno")
>
> Igual simplemente quieres trabajar con los datos en columna.
>
> Un saludo,
>
> Carlos J. Gil Bellosta
> http://www.datanalytics.com
>
> El día 11 de abril de 2014, 12:54, José Luis Cañadas Reche
> <canadasreche en gmail.com> escribió:
>> Buenos días.
>>
>> Hoy ando un poco (o bastante) espeso y no doy con la tecla de una cosa que
>> seguro que es muy simple..
>>
>> Pongo un ejemplo.
>>
>> var1 <- c(rep(0,3),rep(1,2))
>> var2 <- c(rep(1,2),0,0,1)
>> var3 <- c(rep(1,2),rep(0,3))
>> var4 <- c(rep(1,2),rep(0,3))
>> datos <- data.frame(fila=1:5,var1, var2, var3, var4)
>>
>> datos
>> datos
>>    fila var1 var2 var3 var4
>> 1    1    0    1    1    1
>> 2    2    0    1    1    1
>> 3    3    0    0    0    0
>> 4    4    1    0    0    0
>> 5    5    1    1    0    0
>>
>> El caso es que quiero crear 3 variables nuevas p1, p2 y p3 de forma que p1
>> recoja el nombre de la primera variables dónde hay un 1 .
>>
>> Se quedaría
>>
>> datos
>>    fila var1 var2 var3 var4   p1   p2   p3
>> 1    1    0    1    1    1 var2 var3 var4
>> 2    2    0    1    1    1 var2 var3 var4
>> 3    3    0    0    0    0    0    0    0
>> 4    4    1    0    0    0 var1    0    0
>> 5    5    1    1    0    0 var1 var2    0
>>
>>
>> El caso es que no puedo haber más de 3 respuestas. En mis datos reales tengo
>> más de 600 variables de tipo 0,1 , pero nadie ha contestado más de 3
>> respuestas.
>> ¿cómo podría asignar a p1, p2 y p3 el nombre de las variables dónde hay un
>> 1?
>>
>> alguna idea?
>>
>> Saludos.
>>
>> _______________________________________________
>> R-help-es mailing list
>> R-help-es en r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-help-es



Más información sobre la lista de distribución R-help-es