Hola buen día a todos, tengo un el problema de que aveces por medio de la funcion by saco data.frame, entonces el by me da un list con los data.frame, que tienen la misma estructura. El problema empieza cuando quiero tener de nuevo un único data.frame, como tienen todos la misma estructura pero de numero diferente de observaciones, estos pueden ser pegados uno bajo el otro con un cbind y for, pero cuando son muchos elementos en el list y los data frame son de tamaño considerable esta tarea se empieza a volver muy lenta. he creado una función para que haga pegado parciales primero de 3 en 3 o de n en n y asi recursivamente hasta tener un solo data.frame pero me gustaria saber si alguien a tenido este problema y ha encontrado una función que permita hacer esta tarea de forma eficiente lo que hago en esencia es lo que seria un "union all" de sql por ejemplo se tiene la lista L=list(data.frame(a=1:2,b=letters[1:2]),data.frame(a=3:4,b=letters[3:4]),data.frame(a=5:6,b=letters[5:6])) una forma de hacerlo lo que quiero es escribir L2=rbind(L[[1]],L[[2]],L[[3]]) L2 2> L2 a b 1 1 a 2 2 b 3 3 c 4 4 d 5 5 e 6 6 f claro que en ciertos programas esto no sabemos de que tamaño sera el list, es absurdo escribirlo a mano todo si tuvieramos 50 elementos en el list, si se hace recursivo por un for uno a uno como lo comentaba si los data.frame son de tamaño considerable se vuelve muy lento, pues por lo que veo cada que ejecutas un cbind escribe los dos data.frames que estas uniendo, entonces cada que pegas uno mas es mas y mas lento. espero alguien tenga una buena idea de como hacer esto gracias por la ayuda [[alternative HTML version deleted]]
Hola buenas noches (o lo que se diga de madrugada) Juan: Usa una función que crea otra función, do.call. Por ejemplo: do.call(rbind, resultado) Luciano El 28 de junio de 2012 01:19, Juan mv <juanmove@gmail.com> escribió:> Hola buen día a todos, > > tengo un el problema de que aveces por medio de la funcion by saco > data.frame, entonces el by me da un list con los data.frame, que tienen la > misma estructura. > > El problema empieza cuando quiero tener de nuevo un único data.frame, como > tienen todos la misma estructura pero de numero diferente de observaciones, > estos pueden ser pegados uno bajo el otro con un cbind y for, pero cuando > son muchos elementos en el list y los data frame son de tamaño considerable > esta tarea se empieza a volver muy lenta. > > he creado una función para que haga pegado parciales primero de 3 en 3 o de > n en n y asi recursivamente hasta tener un solo data.frame > > pero me gustaria saber si alguien a tenido este problema y ha encontrado > una función que permita hacer esta tarea de forma eficiente > > lo que hago en esencia es lo que seria un "union all" de sql > > por ejemplo se tiene la lista > > > L=list(data.frame(a=1:2,b=letters[1:2]),data.frame(a=3:4,b=letters[3:4]),data.frame(a=5:6,b=letters[5:6])) > > una forma de hacerlo lo que quiero es escribir > L2=rbind(L[[1]],L[[2]],L[[3]]) > L2 > > 2> L2 > a b > 1 1 a > 2 2 b > 3 3 c > 4 4 d > 5 5 e > 6 6 f > > > claro que en ciertos programas esto no sabemos de que tamaño sera el list, > es absurdo escribirlo a mano todo si tuvieramos 50 elementos en el list, si > se hace recursivo por un for uno a uno como lo comentaba si los data.frame > son de tamaño considerable se vuelve muy lento, pues por lo que veo cada > que ejecutas un cbind escribe los dos data.frames que estas uniendo, > entonces cada que pegas uno mas es mas y mas lento. > > espero alguien tenga una buena idea de como hacer esto > > > gracias por la ayuda > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >[[alternative HTML version deleted]]
Juan, Creo que do.call(rbind, L) seria suficiente en este caso. Jorge.- 2012/6/28 Juan mv <juanmove@gmail.com>> Hola buen día a todos, > > tengo un el problema de que aveces por medio de la funcion by saco > data.frame, entonces el by me da un list con los data.frame, que tienen la > misma estructura. > > El problema empieza cuando quiero tener de nuevo un único data.frame, como > tienen todos la misma estructura pero de numero diferente de observaciones, > estos pueden ser pegados uno bajo el otro con un cbind y for, pero cuando > son muchos elementos en el list y los data frame son de tamaño considerable > esta tarea se empieza a volver muy lenta. > > he creado una función para que haga pegado parciales primero de 3 en 3 o de > n en n y asi recursivamente hasta tener un solo data.frame > > pero me gustaria saber si alguien a tenido este problema y ha encontrado > una función que permita hacer esta tarea de forma eficiente > > lo que hago en esencia es lo que seria un "union all" de sql > > por ejemplo se tiene la lista > > > L=list(data.frame(a=1:2,b=letters[1:2]),data.frame(a=3:4,b=letters[3:4]),data.frame(a=5:6,b=letters[5:6])) > > una forma de hacerlo lo que quiero es escribir > L2=rbind(L[[1]],L[[2]],L[[3]]) > L2 > > 2> L2 > a b > 1 1 a > 2 2 b > 3 3 c > 4 4 d > 5 5 e > 6 6 f > > > claro que en ciertos programas esto no sabemos de que tamaño sera el list, > es absurdo escribirlo a mano todo si tuvieramos 50 elementos en el list, si > se hace recursivo por un for uno a uno como lo comentaba si los data.frame > son de tamaño considerable se vuelve muy lento, pues por lo que veo cada > que ejecutas un cbind escribe los dos data.frames que estas uniendo, > entonces cada que pegas uno mas es mas y mas lento. > > espero alguien tenga una buena idea de como hacer esto > > > gracias por la ayuda > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >[[alternative HTML version deleted]]
Muchas gracias a ambos, eso funciona de maravilla es justamente lo que había buscado El 27 de junio de 2012 23:46, Jorge I Velez <jorgeivanvelez@gmail.com>escribió:> Juan, > > Creo que > > do.call(rbind, L) > > seria suficiente en este caso. > > Jorge.- > > > 2012/6/28 Juan mv <juanmove@gmail.com> > >> Hola buen día a todos, >> >> tengo un el problema de que aveces por medio de la funcion by saco >> data.frame, entonces el by me da un list con los data.frame, que tienen la >> misma estructura. >> >> El problema empieza cuando quiero tener de nuevo un único data.frame, como >> tienen todos la misma estructura pero de numero diferente de >> observaciones, >> estos pueden ser pegados uno bajo el otro con un cbind y for, pero cuando >> son muchos elementos en el list y los data frame son de tamaño >> considerable >> esta tarea se empieza a volver muy lenta. >> >> he creado una función para que haga pegado parciales primero de 3 en 3 o >> de >> n en n y asi recursivamente hasta tener un solo data.frame >> >> pero me gustaria saber si alguien a tenido este problema y ha encontrado >> una función que permita hacer esta tarea de forma eficiente >> >> lo que hago en esencia es lo que seria un "union all" de sql >> >> por ejemplo se tiene la lista >> >> >> L=list(data.frame(a=1:2,b=letters[1:2]),data.frame(a=3:4,b=letters[3:4]),data.frame(a=5:6,b=letters[5:6])) >> >> una forma de hacerlo lo que quiero es escribir >> L2=rbind(L[[1]],L[[2]],L[[3]]) >> L2 >> >> 2> L2 >> a b >> 1 1 a >> 2 2 b >> 3 3 c >> 4 4 d >> 5 5 e >> 6 6 f >> >> >> claro que en ciertos programas esto no sabemos de que tamaño sera el list, >> es absurdo escribirlo a mano todo si tuvieramos 50 elementos en el list, >> si >> se hace recursivo por un for uno a uno como lo comentaba si los data.frame >> son de tamaño considerable se vuelve muy lento, pues por lo que veo cada >> que ejecutas un cbind escribe los dos data.frames que estas uniendo, >> entonces cada que pegas uno mas es mas y mas lento. >> >> espero alguien tenga una buena idea de como hacer esto >> >> >> gracias por la ayuda >> >> [[alternative HTML version deleted]] >> >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es@r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> >> >[[alternative HTML version deleted]]