Carlos Ortega
2015-May-15 00:15 UTC
[R-es] comportamiento de data.table al hacer calculos por grupos
Hola, Puedes crear las dos nuevas variables (media y desviación) y ordenar así:> med <- datIn[, .(vmed=mean(media), vstd=sd(media)),by=.(sol,dia,con)][order(sol,dia)]> head(med)sol dia con vmed vstd 1: con 1 0 -29.37 4.415641 2: con 2 0 -31.65 3.178487 3: con 3 0 -28.25 1.485672 4: con 4 0 -26.17 1.159550 5: con 5 0 -27.94 2.563505 6: con 6 0 -28.68 3.142823 Saludos, Carlos Ortega www.qualityexcellence.es El 15 de mayo de 2015, 3:00, eric <ericconchamunoz en gmail.com> escribió:> Muchas gracias Freddy y Carlos ... estuve intentando con .() y con list(), > para calcular la media y el error estandar al mismo tiempo en dos columnas, > pero me arrojaba un error que no supe interpretar. > > Ahora ya funciona como sugiere Carlos. > > Muchas gracias de nuevo. > > Saludos, Eric. > > > > > > On 14/05/15 19:28, Carlos Ortega wrote: > >> Hola, >> >> La forma de hacerlo con data.table es esta: >> >> > library(data.table) >> > datIn <- fread("zp.res") >> > med <- datIn[, .(vmed=mean(media)), by=.(sol,dia,con)] >> > head(med) >> sol dia con vmed >> 1: con 1 0 -29.37 >> 2: dec 1 1 -30.35 >> 3: dec 1 3 -37.15 >> 4: dec 1 5 -31.55 >> 5: dol 1 1 -24.02 >> 6: dol 1 3 -32.95 >> >> * La solución que has empleado actualiza el valor de una columna. Y >> aunque te calcula el valor medio por grupo, lo adjunta al data.table >> original. >> * En cambio esta otra forma se calcula únicamente el valor medio por >> grupo. >> >> Y bueno si quieres ordenar para que salga el mismo orden que en sqldf, >> puedes hacer esto otro: >> >> > setorder(med, sol, dia) >> > head(med) >> sol dia con vmed >> 1: con 1 0 -29.37 >> 2: con 2 0 -31.65 >> 3: con 3 0 -28.25 >> 4: con 4 0 -26.17 >> 5: con 5 0 -27.94 >> 6: con 6 0 -28.68 >> >> >> Saludos, >> Carlos Ortega >> www.qualiytexcellence.es <http://www.qualiytexcellence.es> >> >> El 15 de mayo de 2015, 1:00, eric <ericconchamunoz en gmail.com >> <mailto:ericconchamunoz en gmail.com>> escribió: >> >> >> Estimada comunidad tengo un problema del que no encuentro datos que >> me ayuden mucho en la web. >> >> Estoy haciendo calculos por grupos con data,table. Tengo un archivo >> (zp.res) con tres columnas que clasifican los datos (sol, con, dia) >> y una columna de datos numericos (media), de la siguiente forma: >> >> sol con dia media >> 1: con 0 1 -22.6 >> 2: con 0 1 -36.6 >> 3: con 0 1 -35.6 >> >> y quiero calcular el promedio de "media" (la col 4) agrupando con >> las variables sol,con,dia. Lo hago de la siguiente forma: >> >> med <- zp.res[, mean(media), by="sol,dia,con"] >> >> cuando reviso "med" esta todo bien, se han calculado las medias y el >> objeto tiene solo las filas que corresponden a los promedios con sus >> respectivas columnas sol,con,dia que los identifican. Pero como >> notaran por el codigo, la columna con el resultado no tiene un >> nombre asi es que R la bautiza como V1. Quise ponele un nombre y >> agregue este al codigo de la siguiente forma: >> >> med <- zp.res[, "ave":=mean(media), by="sol,dia,con"] >> >> el problema es que ahora el objeto med tiene el mismo numero de >> filas que zp.res y repite el promedio para cada dato dentro del >> grupo obtenido con by="sol,dia,con". Esto no me sirve pues tengo que >> graficar los promedios ... >> >> mmmmm puede que mi explicacion sea algo confusa, espero que me >> entiendan. >> >> Encontre que luego puedo renombrar la columna, pero no lo quiero >> hacer, pues pienso que deberia ser estandar poder ponerle el nombre >> y que se construya bien el objeto con los promedios inmediatamente. >> Ademas el promedio es solo uno de los calculos que debo hacer y los >> otros tambien quedan con el nombre V1 en la mismo data.table. >> >> Alguna idea de como hacerlo ? >> >> Adjunto archivo con datos. >> >> Saludos y gracias, eric. >> >> >> >> >> >> -- >> Forest Engineer >> Master in Environmental and Natural Resource Economics >> Ph.D. student in Sciences of Natural Resources at La Frontera >> University >> Member in AguaDeTemu2030, citizen movement for Temuco with green >> city standards for living >> >> Nota: Las tildes se han omitido para asegurar compatibilidad con >> algunos lectores de correo. >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es en r-project.org <mailto:R-help-es en r-project.org> >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> >> >> >> >> -- >> Saludos, >> Carlos Ortega >> www.qualityexcellence.es <http://www.qualityexcellence.es> >> > > -- > Forest Engineer > Master in Environmental and Natural Resource Economics > Ph.D. student in Sciences of Natural Resources at La Frontera University > Member in AguaDeTemu2030, citizen movement for Temuco with green city > standards for living > > Nota: Las tildes se han omitido para asegurar compatibilidad con algunos > lectores de correo. >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
eric
2015-May-15 01:00 UTC
[R-es] comportamiento de data.table al hacer calculos por grupos
Muchas gracias Freddy y Carlos ... estuve intentando con .() y con list(), para calcular la media y el error estandar al mismo tiempo en dos columnas, pero me arrojaba un error que no supe interpretar. Ahora ya funciona como sugiere Carlos. Muchas gracias de nuevo. Saludos, Eric. On 14/05/15 19:28, Carlos Ortega wrote:> Hola, > > La forma de hacerlo con data.table es esta: > > > library(data.table) > > datIn <- fread("zp.res") > > med <- datIn[, .(vmed=mean(media)), by=.(sol,dia,con)] > > head(med) > sol dia con vmed > 1: con 1 0 -29.37 > 2: dec 1 1 -30.35 > 3: dec 1 3 -37.15 > 4: dec 1 5 -31.55 > 5: dol 1 1 -24.02 > 6: dol 1 3 -32.95 > > * La solución que has empleado actualiza el valor de una columna. Y > aunque te calcula el valor medio por grupo, lo adjunta al data.table > original. > * En cambio esta otra forma se calcula únicamente el valor medio por > grupo. > > Y bueno si quieres ordenar para que salga el mismo orden que en sqldf, > puedes hacer esto otro: > > > setorder(med, sol, dia) > > head(med) > sol dia con vmed > 1: con 1 0 -29.37 > 2: con 2 0 -31.65 > 3: con 3 0 -28.25 > 4: con 4 0 -26.17 > 5: con 5 0 -27.94 > 6: con 6 0 -28.68 > > > Saludos, > Carlos Ortega > www.qualiytexcellence.es <http://www.qualiytexcellence.es> > > El 15 de mayo de 2015, 1:00, eric <ericconchamunoz en gmail.com > <mailto:ericconchamunoz en gmail.com>> escribió: > > Estimada comunidad tengo un problema del que no encuentro datos que > me ayuden mucho en la web. > > Estoy haciendo calculos por grupos con data,table. Tengo un archivo > (zp.res) con tres columnas que clasifican los datos (sol, con, dia) > y una columna de datos numericos (media), de la siguiente forma: > > sol con dia media > 1: con 0 1 -22.6 > 2: con 0 1 -36.6 > 3: con 0 1 -35.6 > > y quiero calcular el promedio de "media" (la col 4) agrupando con > las variables sol,con,dia. Lo hago de la siguiente forma: > > med <- zp.res[, mean(media), by="sol,dia,con"] > > cuando reviso "med" esta todo bien, se han calculado las medias y el > objeto tiene solo las filas que corresponden a los promedios con sus > respectivas columnas sol,con,dia que los identifican. Pero como > notaran por el codigo, la columna con el resultado no tiene un > nombre asi es que R la bautiza como V1. Quise ponele un nombre y > agregue este al codigo de la siguiente forma: > > med <- zp.res[, "ave":=mean(media), by="sol,dia,con"] > > el problema es que ahora el objeto med tiene el mismo numero de > filas que zp.res y repite el promedio para cada dato dentro del > grupo obtenido con by="sol,dia,con". Esto no me sirve pues tengo que > graficar los promedios ... > > mmmmm puede que mi explicacion sea algo confusa, espero que me > entiendan. > > Encontre que luego puedo renombrar la columna, pero no lo quiero > hacer, pues pienso que deberia ser estandar poder ponerle el nombre > y que se construya bien el objeto con los promedios inmediatamente. > Ademas el promedio es solo uno de los calculos que debo hacer y los > otros tambien quedan con el nombre V1 en la mismo data.table. > > Alguna idea de como hacerlo ? > > Adjunto archivo con datos. > > Saludos y gracias, eric. > > > > > > -- > Forest Engineer > Master in Environmental and Natural Resource Economics > Ph.D. student in Sciences of Natural Resources at La Frontera University > Member in AguaDeTemu2030, citizen movement for Temuco with green > city standards for living > > Nota: Las tildes se han omitido para asegurar compatibilidad con > algunos lectores de correo. > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org <mailto:R-help-es en r-project.org> > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es <http://www.qualityexcellence.es>-- Forest Engineer Master in Environmental and Natural Resource Economics Ph.D. student in Sciences of Natural Resources at La Frontera University Member in AguaDeTemu2030, citizen movement for Temuco with green city standards for living Nota: Las tildes se han omitido para asegurar compatibilidad con algunos lectores de correo.
eric
2015-May-15 20:17 UTC
[R-es] comportamiento de data.table al hacer calculos por grupos
Muchas Gracias Carlos. Saludos, eric. On 14/05/15 20:15, Carlos Ortega wrote:> Hola, > > Puedes crear las dos nuevas variables (media y desviación) y ordenar así: > > > med <- datIn[, .(vmed=mean(media), vstd=sd(media)), > by=.(sol,dia,con)][order(sol,dia)] > > head(med) > sol dia con vmed vstd > 1: con 1 0 -29.37 4.415641 > 2: con 2 0 -31.65 3.178487 > 3: con 3 0 -28.25 1.485672 > 4: con 4 0 -26.17 1.159550 > 5: con 5 0 -27.94 2.563505 > 6: con 6 0 -28.68 3.142823 > > Saludos, > Carlos Ortega > www.qualityexcellence.es <http://www.qualityexcellence.es> > > El 15 de mayo de 2015, 3:00, eric <ericconchamunoz en gmail.com > <mailto:ericconchamunoz en gmail.com>> escribió: > > Muchas gracias Freddy y Carlos ... estuve intentando con .() y con > list(), para calcular la media y el error estandar al mismo tiempo > en dos columnas, pero me arrojaba un error que no supe interpretar. > > Ahora ya funciona como sugiere Carlos. > > Muchas gracias de nuevo. > > Saludos, Eric. > > > > > > On 14/05/15 19:28, Carlos Ortega wrote: > > Hola, > > La forma de hacerlo con data.table es esta: > > > library(data.table) > > datIn <- fread("zp.res") > > med <- datIn[, .(vmed=mean(media)), by=.(sol,dia,con)] > > head(med) > sol dia con vmed > 1: con 1 0 -29.37 > 2: dec 1 1 -30.35 > 3: dec 1 3 -37.15 > 4: dec 1 5 -31.55 > 5: dol 1 1 -24.02 > 6: dol 1 3 -32.95 > > * La solución que has empleado actualiza el valor de una > columna. Y > aunque te calcula el valor medio por grupo, lo adjunta al > data.table > original. > * En cambio esta otra forma se calcula únicamente el valor > medio por > grupo. > > Y bueno si quieres ordenar para que salga el mismo orden que en > sqldf, > puedes hacer esto otro: > > > setorder(med, sol, dia) > > head(med) > sol dia con vmed > 1: con 1 0 -29.37 > 2: con 2 0 -31.65 > 3: con 3 0 -28.25 > 4: con 4 0 -26.17 > 5: con 5 0 -27.94 > 6: con 6 0 -28.68 > > > Saludos, > Carlos Ortega > www.qualiytexcellence.es <http://www.qualiytexcellence.es> > <http://www.qualiytexcellence.es> > > El 15 de mayo de 2015, 1:00, eric <ericconchamunoz en gmail.com > <mailto:ericconchamunoz en gmail.com> > <mailto:ericconchamunoz en gmail.com > <mailto:ericconchamunoz en gmail.com>>> escribió: > > > Estimada comunidad tengo un problema del que no encuentro > datos que > me ayuden mucho en la web. > > Estoy haciendo calculos por grupos con data,table. Tengo un > archivo > (zp.res) con tres columnas que clasifican los datos (sol, > con, dia) > y una columna de datos numericos (media), de la siguiente > forma: > > sol con dia media > 1: con 0 1 -22.6 > 2: con 0 1 -36.6 > 3: con 0 1 -35.6 > > y quiero calcular el promedio de "media" (la col 4) > agrupando con > las variables sol,con,dia. Lo hago de la siguiente forma: > > med <- zp.res[, mean(media), by="sol,dia,con"] > > cuando reviso "med" esta todo bien, se han calculado las > medias y el > objeto tiene solo las filas que corresponden a los > promedios con sus > respectivas columnas sol,con,dia que los identifican. Pero como > notaran por el codigo, la columna con el resultado no tiene un > nombre asi es que R la bautiza como V1. Quise ponele un > nombre y > agregue este al codigo de la siguiente forma: > > med <- zp.res[, "ave":=mean(media), by="sol,dia,con"] > > el problema es que ahora el objeto med tiene el mismo numero de > filas que zp.res y repite el promedio para cada dato dentro del > grupo obtenido con by="sol,dia,con". Esto no me sirve pues > tengo que > graficar los promedios ... > > mmmmm puede que mi explicacion sea algo confusa, espero que me > entiendan. > > Encontre que luego puedo renombrar la columna, pero no lo > quiero > hacer, pues pienso que deberia ser estandar poder ponerle > el nombre > y que se construya bien el objeto con los promedios > inmediatamente. > Ademas el promedio es solo uno de los calculos que debo > hacer y los > otros tambien quedan con el nombre V1 en la mismo data.table. > > Alguna idea de como hacerlo ? > > Adjunto archivo con datos. > > Saludos y gracias, eric. > > > > > > -- > Forest Engineer > Master in Environmental and Natural Resource Economics > Ph.D. student in Sciences of Natural Resources at La > Frontera University > Member in AguaDeTemu2030, citizen movement for Temuco with > green > city standards for living > > Nota: Las tildes se han omitido para asegurar > compatibilidad con > algunos lectores de correo. > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org <mailto:R-help-es en r-project.org> > <mailto:R-help-es en r-project.org <mailto:R-help-es en r-project.org>> > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es <http://www.qualityexcellence.es> > <http://www.qualityexcellence.es> > > > -- > Forest Engineer > Master in Environmental and Natural Resource Economics > Ph.D. student in Sciences of Natural Resources at La Frontera University > Member in AguaDeTemu2030, citizen movement for Temuco with green > city standards for living > > Nota: Las tildes se han omitido para asegurar compatibilidad con > algunos lectores de correo. > > > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es <http://www.qualityexcellence.es>-- Forest Engineer Master in Environmental and Natural Resource Economics Ph.D. student in Sciences of Natural Resources at La Frontera University Member in AguaDeTemu2030, citizen movement for Temuco with green city standards for living Nota: Las tildes se han omitido para asegurar compatibilidad con algunos lectores de correo.