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

Marcelino de la Cruz marcelino.delacruz en upm.es
Vie Abr 11 14:24:11 CEST 2014


Otra versión, en una sola línea:

 > datos=cbind(datos,t(apply(datos,1, function(x) 
{v=names(datos)[which(x[-1]==1)+1];return(c(v, rep(0, 3-length(v))))})))
 > datos
   fila var1 var2 var3 var4    1    2    3
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 11/04/2014 13:59, Jorge I Velez escribió:
> Hola José Luis,
>
> Gracias por el ejemplo.  Intenta lo siguiente:
>
> d <- datos[, -1]
> p <- t(apply(d, 1, function(x){
>   r <- colnames(d)[x == 1][1:ncol(d)]
>   r[is.na(r)] <- 0
>   r
> }))
> cbind(d, p)
> #var1 var2 var3 var4    1    2    3 4
> #1    0    1    1    1 var2 var3 var4 0
> #2    0    1    1    1 var2 var3 var4 0
> #3    0    0    0    0    0    0    0 0
> #4    1    0    0    0 var1    0    0 0
> #5    1    1    0    0 var1 var2    0 0
>
> Saludos,
> Jorge.-
>
>
>
> 2014-04-11 20:54 GMT+10:00 José Luis Cañadas Reche <canadasreche en gmail.com>:
>
>> 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
>>
>
> 	[[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
>



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