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]]
Ahora sí, perfecto!! Muchas gracias y saludos Juan. De: Adolfo Álvarez [mailto:adalvarez en gmail.com] Enviado el: miércoles, 19 de noviembre de 2014 10:30 Para: JCMld CC: r-help-es en r-project.org Asunto: Re: [R-es] aplanar campo multivalor en data frame 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 campoidentificador.> 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]]