José Luis,

Para obtener los mismos resultados del correo que enviaste describiendo tu
problema, debes modificar el código que te envié, así:

d <- datos[, -1]
p <- sapply(1:ncol(d), function(i){
 x <- d[, i]
x[x == 0] <- 0
 x[x == 1] <- colnames(d)[i]
x
})
cbind(datos, p)

Saludos,
Jorge.-





2014-04-11 22:08 GMT+10:00 José Luis Cañadas Reche <canadasreche@gmail.com>:

> 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@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@r-project.org
>>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>>
>>
>

	[[alternative HTML version deleted]]

