[R-es] Función aggregate en dataframe

Carlos Ortega co| @end|ng |rom qu@||tyexce||ence@e@
Mie Mar 29 22:21:40 CEST 2023


OK. Bien.

El mié, 29 mar 2023 a las 22:20, David Camilo Gomez Medina (<
dcgomezme using unal.edu.co>) escribió:

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

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20230329/a75f4bf7/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/a75f4bf7/attachment-0001.png>


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