[R-es] Función aggregate en dataframe

David Camilo Gomez Medina dcgomezme @end|ng |rom un@|@edu@co
Mie Mar 29 22:20:24 CEST 2023


Listo, gracias.

On Wed, 29 Mar 2023 at 15:19, Carlos Ortega <cof using qualityexcellence.es>
wrote:

> Ah... veo que tienes algunos valores nulos...
> Entonces para calcular la media, habría que incluir este otro cambio:
>
> *+   mutate(mes_avg = mean(value, na.rm = TRUE), .by = c(month, vars)) %>%*
>
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
>
>
>
> El mié, 29 mar 2023 a las 22:17, Carlos Ortega (<cof using qualityexcellence.es>)
> escribió:
>
>> Ah...
>> Sí, de esta forma...
>>
>> > resout <- df %>%
>> +   mutate(year = year(ym(yearmon))) %>%
>> +   mutate(month = month(ym(yearmon))) %>%
>> +   select(-year) %>%
>> +   relocate(month, .after = yearmon) %>%
>> +
>>
>> *  pivot_longer( cols = X1:X5, names_to = "vars" ) %>%+   mutate(mes_avg
>> = mean(value), .by = c(month, vars)) %>%+   select(month, vars, mes_avg)
>> %>%*
>> +   distinct() %>%
>> +   as.data.frame
>> > resout
>>    month vars   mes_avg
>> 1      1   X1 0.5063388
>> 2      1   X2 0.6054863
>> 3      1   X3 0.4747568
>> 4      1   X4 0.6525521
>> 5      1   X5 0.3378098
>> 6      2   X1 0.6480751
>> 7      2   X2 0.3866987
>> 8      2   X3 0.5628610
>> 9      2   X4 0.2965187
>> 10     2   X5 0.5039561
>> 11     3   X1 0.3565034
>> 12     3   X2 0.5595157
>> 13     3   X3 0.4526992
>> 14     3   X4 0.5256429
>> 15     3   X5 0.5396339
>> 16     4   X1 0.3492785
>> 17     4   X2 0.4719472
>> 18     4   X3 0.6069615
>> 19     4   X4 0.5099684
>> 20     4   X5 0.5375129
>> 21     5   X1 0.6083371
>> 22     5   X2 0.6986131
>> 23     5   X3 0.3419662
>> 24     5   X4 0.4950851
>> 25     5   X5 0.5467911
>> 26     6   X1 0.2031233
>> 27     6   X2 0.4891435
>> 28     6   X3 0.3186853
>> 29     6   X4 0.7101540
>> 30     6   X5 0.4964806
>> 31     7   X1 0.4853932
>> 32     7   X2 0.5883874
>> 33     7   X3 0.8781151
>> 34     7   X4 0.4065725
>> 35     7   X5 0.3009754
>> 36     8   X1 0.4974401
>> 37     8   X2 0.6118529
>> 38     8   X3 0.6042984
>> 39     8   X4 0.3386884
>> 40     8   X5 0.6710002
>> 41     9   X1 0.6392356
>> 42     9   X2 0.4150898
>> 43     9   X3 0.5861839
>> 44     9   X4 0.4325483
>> 45     9   X5 0.6310271
>> 46    10   X1 0.4523220
>> 47    10   X2 0.5130199
>> 48    10   X3 0.3362966
>> 49    10   X4 0.5372736
>> 50    10   X5 0.5077318
>> 51    11   X1 0.4055051
>> 52    11   X2 0.4510812
>> 53    11   X3 0.2245734
>> 54    11   X4 0.7682052
>> 55    11   X5 0.3541822
>> 56    12   X1 0.6346173
>> 57    12   X2 0.5956540
>> 58    12   X3 0.3881634
>> 59    12   X4 0.6156253
>> 60    12   X5 0.6732854
>> >
>>
>> #---------
>>
>> Gracias,
>> Carlos Ortega
>> www.qualityexcellence.es
>>
>>
>> El mié, 29 mar 2023 a las 22:12, David Camilo Gomez Medina (<
>> dcgomezme using unal.edu.co>) escribió:
>>
>>> Muchísimas gracias Carlos, aunque yo quiero conservar las columnas. Por
>>> ejemplo, tú creaste información del año 2019 a 2022, para la columna X1
>>> quiero calcular el promedio de enero para esos años y así con las demás
>>> columnas. ¿Cómo podría cambiar tu código?
>>>
>>> On Wed, 29 Mar 2023 at 15:05, Carlos Ortega <cof using qualityexcellence.es>
>>> wrote:
>>>
>>>> Ah, gracias..
>>>>
>>>> Me he creado uno de forma sintética...
>>>> Esta es una forma...
>>>>
>>>> #---------------------------------
>>>> > library(dplyr)
>>>> > library(tidyr)
>>>> > library(lubridate)
>>>> >
>>>> >
>>>> > crear_data_frame <- function(anios_inicio, anios_fin) {
>>>> +   anios_meses <- expand.grid(Year = anios_inicio:anios_fin, Month =
>>>> 1:12)
>>>> +   anios_meses$yearmon <- paste0(anios_meses$Year, "-",
>>>> sprintf("%02d", anios_meses$Month))
>>>> +   vars <- replicate(5, runif(nrow(anios_meses)))
>>>> +   data.frame(anios_meses, vars, stringsAsFactors = FALSE) %>%
>>>> +     select(-Year, -Month) %>%
>>>> +     arrange(yearmon)
>>>> + }
>>>> >
>>>> > df <- crear_data_frame(2019, 2022)
>>>> >
>>>> > head(df)
>>>>   yearmon        X1        X2          X3        X4         X5
>>>> 1 2019-01 0.2783405 0.1556831 0.007564986 0.9981701 0.35200632
>>>> 2 2019-02 0.3906244 0.1525354 0.794696565 0.6935012 0.15611665
>>>> 3 2019-03 0.3607439 0.2350400 0.208026463 0.1175302 0.84753470
>>>> 4 2019-04 0.7787032 0.3713333 0.697207166 0.3701457 0.04013776
>>>> 5 2019-05 0.4973347 0.6898472 0.603442922 0.5696876 0.63328772
>>>> 6 2019-06 0.5392983 0.9604180 0.456174444 0.7767546 0.62486765
>>>> >
>>>> > resout <- df %>%
>>>> +   mutate(year = year(ym(yearmon))) %>%
>>>> +   mutate(month = month(ym(yearmon))) %>%
>>>> +   select(-year) %>%
>>>> +   relocate(month, .after = yearmon) %>%
>>>> +   pivot_longer( cols = X1:X5) %>%
>>>> +   mutate(mes_avg = mean(value), .by = month) %>%
>>>> +   select(month, mes_avg) %>%
>>>> +   distinct() %>%
>>>> +   as.data.frame
>>>> > resout
>>>>    month   mes_avg
>>>> 1      1 0.4305554
>>>> 2      2 0.4485030
>>>> 3      3 0.4451672
>>>> 4      4 0.4101606
>>>> 5      5 0.4715812
>>>> 6      6 0.5428447
>>>> 7      7 0.5350282
>>>> 8      8 0.4792279
>>>> 9      9 0.5052422
>>>> 10    10 0.4272948
>>>> 11    11 0.5197938
>>>> 12    12 0.3883511
>>>>
>>>> #------------------------------------
>>>>
>>>> El mié, 29 mar 2023 a las 21:54, David Camilo Gomez Medina (<
>>>> dcgomezme using unal.edu.co>) escribió:
>>>>
>>>>> Claro Carlos, gracias, exporté el dataframe a Excel.
>>>>>
>>>>>
>>>>>
>>>>> On Wed, 29 Mar 2023 at 14:44, Carlos Ortega <cof using qualityexcellence.es>
>>>>> wrote:
>>>>>
>>>>>> Hola,
>>>>>>
>>>>>> Puedes pasar una pequeña muestra del conjunto para darte la
>>>>>> solución...
>>>>>>
>>>>>> Gracias,
>>>>>> Carlos Ortega
>>>>>> www.qualityexcellence.es
>>>>>>
>>>>>> El mié, 29 mar 2023 a las 21:38, David Camilo Gomez Medina (<
>>>>>> dcgomezme using unal.edu.co>) escribió:
>>>>>>
>>>>>>> Buen día a todos,
>>>>>>>
>>>>>>> Tengo un dataframe donde está almacenada la información por año y
>>>>>>> mes, deseo calcular el promedio de todos los meses, es decir, obtener el
>>>>>>> promedio mensual multianual de cada columna. He intentado realizarlo con la
>>>>>>> función aggregate, pero no sé cómo seleccionar solamente el mes. Por
>>>>>>> ejemplo, coger solo el mes de enero ('01') de cada año y promediarlo.
>>>>>>>
>>>>>>> Quedo muy atento, muchas gracias.
>>>>>>>
>>>>>>> [image: image.png]
>>>>>>>
>>>>>>> *Aviso legal:* El contenido de este mensaje y los archivos adjuntos
>>>>>>> son confidenciales y de uso exclusivo de la Universidad Nacional de
>>>>>>> Colombia. Se encuentran dirigidos sólo para el uso del destinatario al cual
>>>>>>> van enviados. La reproducción, lectura y/o copia se encuentran prohibidas a
>>>>>>> cualquier persona diferente a este y puede ser ilegal. Si usted lo ha
>>>>>>> recibido por error, infórmenos y elimínelo de su correo. Los Datos
>>>>>>> Personales serán tratados conforme a la Ley 1581 de 2012 y a nuestra
>>>>>>> Política de Datos Personales que podrá consultar en la página web
>>>>>>> www.unal.edu.co. Las opiniones, informaciones, conclusiones y
>>>>>>> cualquier otro tipo de dato contenido en este correo electrónico, no
>>>>>>> relacionados con la actividad de la Universidad Nacional de Colombia, se
>>>>>>> entenderá como personales y de ninguna manera son avaladas por la
>>>>>>> Universidad.
>>>>>>> _______________________________________________
>>>>>>> R-help-es mailing list
>>>>>>> R-help-es using r-project.org
>>>>>>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Saludos,
>>>>>> Carlos Ortega
>>>>>> www.qualityexcellence.es
>>>>>>
>>>>>
>>>>> *Aviso legal:* El contenido de este mensaje y los archivos adjuntos
>>>>> son confidenciales y de uso exclusivo de la Universidad Nacional de
>>>>> Colombia. Se encuentran dirigidos sólo para el uso del destinatario al cual
>>>>> van enviados. La reproducción, lectura y/o copia se encuentran prohibidas a
>>>>> cualquier persona diferente a este y puede ser ilegal. Si usted lo ha
>>>>> recibido por error, infórmenos y elimínelo de su correo. Los Datos
>>>>> Personales serán tratados conforme a la Ley 1581 de 2012 y a nuestra
>>>>> Política de Datos Personales que podrá consultar en la página web
>>>>> www.unal.edu.co. Las opiniones, informaciones, conclusiones y
>>>>> cualquier otro tipo de dato contenido en este correo electrónico, no
>>>>> relacionados con la actividad de la Universidad Nacional de Colombia, se
>>>>> entenderá como personales y de ninguna manera son avaladas por la
>>>>> Universidad.
>>>>>
>>>>
>>>>
>>>> --
>>>> Saludos,
>>>> Carlos Ortega
>>>> www.qualityexcellence.es
>>>>
>>>
>>> *Aviso legal:* El contenido de este mensaje y los archivos adjuntos son
>>> confidenciales y de uso exclusivo de la Universidad Nacional de Colombia.
>>> Se encuentran dirigidos sólo para el uso del destinatario al cual van
>>> enviados. La reproducción, lectura y/o copia se encuentran prohibidas a
>>> cualquier persona diferente a este y puede ser ilegal. Si usted lo ha
>>> recibido por error, infórmenos y elimínelo de su correo. Los Datos
>>> Personales serán tratados conforme a la Ley 1581 de 2012 y a nuestra
>>> Política de Datos Personales que podrá consultar en la página web
>>> www.unal.edu.co. Las opiniones, informaciones, conclusiones y cualquier
>>> otro tipo de dato contenido en este correo electrónico, no relacionados con
>>> la actividad de la Universidad Nacional de Colombia, se entenderá como
>>> personales y de ninguna manera son avaladas por la Universidad.
>>>
>>
>>
>> --
>> Saludos,
>> Carlos Ortega
>> www.qualityexcellence.es
>>
>
>
> --
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
>

-- 
*Aviso legal:* El contenido de este mensaje y los archivos adjuntos son 
confidenciales y de uso exclusivo de la Universidad Nacional de Colombia. 
Se encuentran dirigidos sólo para el uso del destinatario al cual van 
enviados. La reproducción, lectura y/o copia se encuentran prohibidas a 
cualquier persona diferente a este y puede ser ilegal. Si usted lo ha 
recibido por error, infórmenos y elimínelo de su correo. Los Datos 
Personales serán tratados conforme a la Ley 1581 de 2012 y a nuestra 
Política de Datos Personales que podrá consultar en la página web 
www.unal.edu.co <http://www.unal.edu.co/>.* *Las opiniones, informaciones, 
conclusiones y cualquier otro tipo de dato contenido en este correo 
electrónico, no relacionados con la actividad de la Universidad Nacional de 
Colombia, se entenderá como personales y de ninguna manera son avaladas por 
la Universidad.

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20230329/33446677/attachment-0001.html>

------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 25589 bytes
Desc: no disponible
URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20230329/33446677/attachment-0001.png>


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