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 El 15 de mayo de 2015, 1:00, eric <ericconchamu...@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@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > > -- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]] _______________________________________________ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es