[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