[R-es] aplanar campo multivalor en data frame

Adolfo Álvarez adalvarez en gmail.com
Mie Nov 19 10:29:47 CET 2014


Mis disculpas, me he liado al copiar y pegar. Tenia por ahi una lista "a"
que no he pegado en el correo. El codigo correcto seria:

d<-data.frame(id=c(1,2,3,4),quien=c("Juan","Pedro\nMaria","Alberto","Luis\nElena\nJavier\nPaula"),
stringsAsFactors = F)

temp <- strsplit(d$quien, "\n")

quien <- unlist(temp) #Obtenemos todos los "quienes"
id <- rep(d$id,unlist(lapply(temp,length))) #Y los correspondientes id

data.frame(id,quien)

  id   quien
1  1    Juan
2  2   Pedro
3  2   Maria
4  3 Alberto
5  4    Luis
6  4   Elena
7  4  Javier
8  4   Paula

2014-11-19 10:22 GMT+01:00 JCMld <jcmld en carmonarocha.com>:

> Gracias, Adolfo, aunque creo que no funcionaría, ya que el resultado sería
>
>   id   quien
> 1  1    Juan
> 2  2   Pedro
> 3  3   Maria
> 4  4 Alberto
> 5  1    Luis
> 6  2   Elena
> 7  3  Javier
> 8  4   Paula
>
> y no el deseado, que está indicado más abajo. Es decir, no asocia los id's
> adecuados a cada quien.
>
> En cualquier caso, me sirve la solución que propuso el colega Carlos J. Gil
> Bellosta en un correo anterior.
>
> Gracias a todos,
> Juan Carmona.
>
>
> -----Mensaje original-----
> De: r-help-es-bounces en r-project.org [mailto:
> r-help-es-bounces en r-project.org]
> En nombre de Adolfo Álvarez
> Enviado el: martes, 18 de noviembre de 2014 12:30
> Para: r-help-es en r-project.org
> Asunto: Re: [R-es] aplanar campo multivalor en data frame
>
> Una solución que se me ocurre sin usar loops es la siguiente:
>
> quien <- unlist(strsplit(d$quien, "\n")) #Obtenemos todos los "quienes"
> id <- rep(d$id,unlist(lapply(a,length))) #Y los correspondientes id
> data.frame(id,quien)
>
> Saludos!
> Adolfo.
>
>
>
> > Message: 3
> > Date: Mon, 17 Nov 2014 16:36:58 +0100
> > From: "JCMld" <jcmld en carmonarocha.com>
> > To: <r-help-es en r-project.org>
> > Subject: [R-es] aplanar campo multivalor en data frame
> > Message-ID: <006001d0027c$54bb84c0$fe328e40$@com>
> > Content-Type: text/plain; charset="UTF-8"
> >
> > Estimados todos,
> >
> >
> >
> > Se me plantea el siguiente problema con un data frame: me viene un
> > campo de tipo string con m?les l?as y quiero aplanar el data frame, de
> > manera que tenga una ? l?a en cada fila, repitiendo el campo
> identificador.
> > Me explico:
> >
> >
> >
> > Tengo, por ejemplo, el siguiente data frame:
> >
> >
> >
> >
> > d<-data.frame(id=c(1,2,3,4),quien=c("Juan","Pedro\nMaria","Alberto","L
> > uis\nE
> > lena\nJavier\nPaula"))
> >
> >
> >
> > Lo que yo quiero obtener es un nuevo data frame que contenga:
> >
> >
> >
> > id            quien
> >
> > --            -------
> >
> > 1             Juan
> >
> > 2             Pedro
> >
> > 2             Maria
> >
> > 3             Alberto
> >
> > 4             Luis
> >
> > 4             Elena
> >
> > 4             Javier
> >
> > 4             Paula
> >
> >
> >
> > Para separar los diferentes nombres he probado la funci?trsplit, que
> > funciona bien, pero no se me ocurre una manera f?l para obtener el
> > nuevo data frame sin recurrir a un bucle que puede resultar lento si
> > el data frame es grande.
> >
> > ?Alguna idea?
> >
> >
> >
> > Gracias y saludos,
> >
> > Juan Carmona.
> >
> >
> >
> >
> >         [[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
> >
> >
> > Fin de Resumen de R-help-es, Vol 69, Envío 18
> > *********************************************
> >
>
>         [[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]]



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