[R-es] comportamiento de data.table al hacer calculos por grupos

Carlos Ortega cof en qualityexcellence.es
Vie Mayo 15 02:15:04 CEST 2015


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]]



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