Universidad de Cuenca
Material Extra
Johanna Orellana-Alvear (MSc)
johanna.orellana@ucuenca.edu.ec
Curso completo en: http://rpubs.com/Johanna_Orellana_Alvear/programacion_r_indice
Una revisión y ejecución secuencial para trabajar con un data frame.
Abrir el archivo y obtener estadÃsticos generales
df.observaciones <- read.table("observaciones_2003.csv", header = TRUE, stringsAsFactors = FALSE)
summary(df.observaciones)
## FECHA VALOR STATUS ESTACION
## Length:8030 Min. : 0.000 Length:8030 Length:8030
## Class :character 1st Qu.: 0.000 Class :character Class :character
## Mode :character Median : 0.000 Mode :character Mode :character
## Mean : 1.988
## 3rd Qu.: 1.000
## Max. :91.600
## NA's :1786
## year day month
## Min. :2003 Min. : 1.00 Min. : 1.000
## 1st Qu.:2003 1st Qu.: 8.00 1st Qu.: 4.000
## Median :2003 Median :16.00 Median : 7.000
## Mean :2003 Mean :15.72 Mean : 6.526
## 3rd Qu.:2003 3rd Qu.:23.00 3rd Qu.:10.000
## Max. :2003 Max. :31.00 Max. :12.000
##
Manipular la fecha
fechas <- strptime(df.observaciones$FECHA, format="%d/%m/%Y")
df.observaciones$FECHA <- as.POSIXct(fechas)
Recuperar el mes y el año a partir de la fecha
df_events_month <- as.numeric(format(df.observaciones$FECHA,"%m"))
df_events_year <- as.numeric(format(df.observaciones$FECHA,"%Y"))
Unir los nuevos vectores al data frame
df.observaciones = cbind(df.observaciones,df_events_month)
df.observaciones = cbind(df.observaciones,df_events_year)
head(df.observaciones)
## FECHA VALOR STATUS ESTACION year day month df_events_month
## 7671 2003-01-01 0 M012 2003 1 1 1
## 7672 2003-01-02 0 M012 2003 2 1 1
## 7673 2003-01-03 0 M012 2003 3 1 1
## 7674 2003-01-04 0 M012 2003 4 1 1
## 7675 2003-01-05 0 M012 2003 5 1 1
## 7676 2003-01-06 0 M012 2003 6 1 1
## df_events_year
## 7671 2003
## 7672 2003
## 7673 2003
## 7674 2003
## 7675 2003
## 7676 2003
Agregaciones por uno y dos campos
sd_VALOR_monthly <- aggregate(VALOR ~ month, data = df.observaciones, sd)
sd_VALOR_monthly
## month VALOR
## 1 1 4.793814
## 2 2 7.401479
## 3 3 10.284249
## 4 4 8.289255
## 5 5 6.885316
## 6 6 4.416878
## 7 7 3.150891
## 8 8 2.220939
## 9 9 2.862725
## 10 10 3.130080
## 11 11 4.156379
## 12 12 6.350809
sd_VALOR_month_estacion <- aggregate(VALOR ~ month + ESTACION, data = df.observaciones, sd)
sd_VALOR_month_estacion
## month ESTACION VALOR
## 1 1 M012 3.29349963
## 2 2 M012 4.24854005
## 3 3 M012 2.25483471
## 4 4 M012 0.00000000
## 5 5 M012 0.79498428
## 6 6 M012 5.70178435
## 7 7 M012 0.99213032
## 8 8 M012 0.00000000
## 9 9 M012 0.00000000
## 10 10 M012 0.00000000
## 11 11 M012 0.00000000
## 12 12 M012 5.55041160
## 13 1 M040 1.63062096
## 14 2 M040 5.46680580
## 15 3 M040 8.42174477
## 16 4 M040 0.80971827
## 17 5 M040 2.25709872
## 18 6 M040 0.80155022
## 19 7 M040 0.99822423
## 20 8 M040 0.99119782
## 21 9 M040 0.85940370
## 22 10 M040 1.22745475
## 23 11 M040 2.71135543
## 24 12 M040 1.32984759
## 25 1 M142 2.11500527
## 26 2 M142 3.00237120
## 27 3 M142 6.02654344
## 28 4 M142 5.91390724
## 29 5 M142 3.74769033
## 30 6 M142 1.54461988
## 31 7 M142 0.38329071
## 32 8 M142 0.80111481
## 33 9 M142 4.19191340
## 34 10 M142 2.93606788
## 35 11 M142 4.55061067
## 36 12 M142 5.21974951
## 37 1 M180 7.41619399
## 38 2 M180 6.99485227
## 39 3 M180 15.32396465
## 40 4 M180 12.50248757
## 41 5 M180 4.64373552
## 42 6 M180 1.16751529
## 43 7 M180 0.49991397
## 44 8 M180 1.45431505
## 45 9 M180 0.09247553
## 46 10 M180 1.52155127
## 47 11 M180 8.62229436
## 48 12 M180 6.30319939
## 49 1 M185 2.01373065
## 50 2 M185 2.03639402
## 51 3 M185 2.35731872
## 52 4 M185 0.32127305
## 53 5 M185 0.68154396
## 54 6 M185 1.62356416
## 55 1 M232 6.28210122
## 56 2 M232 16.44262592
## 57 3 M232 19.37375678
## 58 4 M232 7.79000428
## 59 5 M232 3.16591729
## 60 6 M232 0.47499546
## 61 7 M232 0.17960530
## 62 8 M232 0.00000000
## 63 9 M232 0.00000000
## 64 10 M232 0.00000000
## 65 11 M232 2.13656992
## 66 12 M232 10.11493200
## 67 1 M239 4.98992964
## 68 2 M239 11.58742477
## 69 3 M239 14.07134433
## 70 4 M239 11.75393551
## 71 5 M239 2.49333736
## 72 6 M239 0.36853235
## 73 7 M239 0.43155134
## 74 8 M239 1.29315817
## 75 9 M239 0.00000000
## 76 10 M239 1.45228778
## 77 11 M239 5.60656840
## 78 12 M239 4.54771359
## 79 1 M292 3.17192998
## 80 2 M292 5.98411035
## 81 3 M292 9.85943465
## 82 4 M292 0.58467989
## 83 5 M292 0.43373844
## 84 6 M292 1.30227721
## 85 7 M292 0.43901160
## 86 8 M292 0.54514475
## 87 9 M292 0.96165566
## 88 10 M292 0.95063080
## 89 11 M292 1.26156261
## 90 12 M292 3.04142015
## 91 1 M418 1.77150686
## 92 2 M418 5.78775847
## 93 3 M418 5.65601402
## 94 4 M418 3.18287263
## 95 5 M418 1.88656256
## 96 6 M418 4.16096253
## 97 7 M418 2.14813247
## 98 8 M418 0.68235834
## 99 9 M418 3.17333720
## 100 10 M418 2.30294809
## 101 11 M418 3.37571448
## 102 12 M418 6.66569294
## 103 1 M419 3.65092123
## 104 4 M419 8.87146336
## 105 5 M419 5.46092473
## 106 6 M419 5.22260890
## 107 7 M419 0.96986863
## 108 8 M419 0.00000000
## 109 9 M419 1.69793993
## 110 12 M419 9.30228322
## 111 1 M420 1.01309703
## 112 2 M420 4.07202353
## 113 3 M420 7.39937370
## 114 4 M420 6.79281991
## 115 5 M420 1.96228964
## 116 6 M420 2.78254204
## 117 7 M420 1.46462957
## 118 8 M420 0.27951571
## 119 9 M420 3.58376929
## 120 10 M420 5.53868118
## 121 11 M420 6.00186657
## 122 12 M420 3.05807586
## 123 1 M421 0.67250135
## 124 2 M421 0.00000000
## 125 3 M421 3.59478116
## 126 4 M421 2.24382678
## 127 5 M421 3.09476492
## 128 6 M421 1.02780315
## 129 7 M421 1.50460941
## 130 8 M421 0.76269189
## 131 9 M421 2.02244873
## 132 10 M421 0.14088812
## 133 11 M421 4.25230837
## 134 12 M421 0.64571374
## 135 1 M422 3.13593120
## 136 2 M422 2.52212170
## 137 3 M422 5.27392857
## 138 4 M422 3.42402096
## 139 5 M422 0.54736907
## 140 6 M422 1.18313824
## 141 7 M422 1.26531903
## 142 8 M422 0.00000000
## 143 9 M422 0.13321834
## 144 10 M422 1.32110250
## 145 11 M422 1.33202810
## 146 12 M422 1.92290663
## 147 1 M432 3.94528710
## 148 2 M432 5.93984394
## 149 3 M432 5.11724892
## 150 4 M432 5.88178955
## 151 6 M432 3.58711135
## 152 7 M432 3.81536791
## 153 8 M432 4.70942318
## 154 9 M432 2.32602715
## 155 10 M432 4.94694649
## 156 11 M432 4.04317077
## 157 12 M432 7.05279324
## 158 1 M481 3.59338999
## 159 2 M481 6.07558650
## 160 3 M481 5.00462152
## 161 4 M481 2.33614527
## 162 5 M481 1.87801084
## 163 6 M481 1.23215539
## 164 7 M481 0.53801707
## 165 8 M481 0.60571986
## 166 9 M481 0.40316278
## 167 10 M481 0.65253847
## 168 11 M481 3.82539157
## 169 12 M481 5.66402342
## 170 1 M482 4.43967692
## 171 2 M482 5.59233590
## 172 3 M482 1.45544953
## 173 4 M482 1.27097782
## 174 5 M482 0.00000000
## 175 1 M503 6.44488628
## 176 2 M503 3.93789082
## 177 3 M503 6.54588765
## 178 4 M503 11.73198987
## 179 5 M503 21.71245963
## 180 6 M503 13.32699965
## 181 7 M503 9.64348462
## 182 8 M503 6.22563207
## 183 9 M503 8.11642580
## 184 10 M503 7.86132086
## 185 11 M503 5.20422132
## 186 12 M503 9.84506535
## 187 1 M760 8.19316526
## 188 2 M760 12.21389182
## 189 3 M760 17.37802963
## 190 4 M760 15.77803690
## 191 5 M760 3.05892665
## 192 6 M760 1.88406811
## 193 7 M760 0.38857335
## 194 8 M760 0.00000000
## 195 9 M760 0.00000000
## 196 10 M760 0.69923153
## 197 11 M760 0.59442815
## 198 12 M760 7.79682455
## 199 1 M773 7.93775516
## 200 2 M773 7.07096586
## 201 3 M773 15.81572445
## 202 4 M773 13.97183579
## 203 5 M773 2.08105639
## 204 6 M773 0.93747644
## 205 7 M773 1.22556110
## 206 8 M773 0.64051391
## 207 9 M773 0.20468647
## 208 10 M773 0.38873935
## 209 11 M773 3.08246990
## 210 12 M773 4.85706534
setwd("~/Documents/R_WORKSPACE/Markdown-HTML")
library(data.table)
## Warning: package 'data.table' was built under R version 3.1.3
df_events_results <- read.table("df_events_results.txt", sep = "\t")
head(df_events_results)
## id start_date end_date duration rain_acc month
## 22 1 2012-11-09 09:45:00 2012-11-09 09:55:00 15 0.2844 Nov
## 65 2 2012-11-09 13:00:00 2012-11-09 13:50:00 55 0.4796 Nov
## 294 3 2012-11-10 07:55:00 2012-11-10 14:05:00 375 23.1356 Nov
## 560 4 2012-11-11 05:50:00 2012-11-11 08:05:00 140 36.8400 Nov
## 586 5 2012-11-11 08:40:00 2012-11-11 09:00:00 25 4.4042 Nov
## 608 6 2012-11-11 10:15:00 2012-11-11 12:25:00 135 15.2808 Nov
## year season Rainrate ReflectivityZ SYNOP
## 22 2012 Less Wet 0.25206 96.872387 continuous light rain
## 65 2012 Less Wet 0.19694 4.850651 continuous moderate drizzle
## 294 2012 Less Wet 2.64290 651.628394 continuous moderate rain
## 560 2012 Less Wet 4.12774 534.810592 continuous moderate rain
## 586 2012 Less Wet 2.68848 329.306270 continuous moderate rain
## 608 2012 Less Wet 2.11760 189.234362 continuous moderate rain
## manualClass a b
## 22 Light Rain 894.20020 1.6138602
## 65 Moderate Drizzle 10.89331 0.7622195
## 294 Moderate Rain 106.95900 1.2848527
## 560 Moderate Rain 74.50780 1.2024312
## 586 Moderate Rain 100.95553 1.1285168
## 608 Light Rain 54.62488 1.1185234
Para trabajar con esta librerÃa el objeto debe ser de la clase data.table. Dos maneras de obtener la información en este formato.
df_events_results <- as.data.table(df_events_results)
fread. Normalmente la lectura de los encabezados usando este comando es automático al leer archivos con extensión .DAT (.dat).El comando DT[i,j,by] tiene 3 partes: i, j y by. La i corresponde a WHERE, j a SELECT y by a GROUP BY.
df_events_results[, mean(duration), by = year]
## year V1
## 1: 2012 135.2778
## 2: 2013 165.8617
## 3: 2014 166.0702
df_events_results[, mean(duration), by = month]
## month V1
## 1: Nov 113.0682
## 2: Dec 136.2838
## 3: Jan 226.2044
## 4: Feb 149.9643
## 5: Mar 175.5429
## 6: Apr 147.6797
## 7: May 142.5459
## 8: Jun 197.1667
## 9: Jul 186.5774
## 10: Aug 179.9367
## 11: Sep 149.3077
## 12: Oct 126.5493
El campo se ha creado con un valor por defecto. Para asignar un nombre al campo nuevo donde se almacenará la media de la duración usamos el sÃmbolo :=
df_events_results[, medDur := mean(duration), by = month]
## id start_date end_date duration rain_acc month
## 1: 1 2012-11-09 09:45:00 2012-11-09 09:55:00 15 0.2844 Nov
## 2: 2 2012-11-09 13:00:00 2012-11-09 13:50:00 55 0.4796 Nov
## 3: 3 2012-11-10 07:55:00 2012-11-10 14:05:00 375 23.1356 Nov
## 4: 4 2012-11-11 05:50:00 2012-11-11 08:05:00 140 36.8400 Nov
## 5: 5 2012-11-11 08:40:00 2012-11-11 09:00:00 25 4.4042 Nov
## ---
## 1588: 1730 2014-08-01 09:25:00 2014-08-01 10:00:00 40 0.4486 Aug
## 1589: 1731 2014-08-02 07:45:00 2014-08-02 08:25:00 45 0.5080 Aug
## 1590: 1732 2014-08-02 09:25:00 2014-08-02 10:10:00 50 1.0062 Aug
## 1591: 1733 2014-08-02 18:55:00 2014-08-02 19:30:00 40 0.1470 Aug
## 1592: 1734 2014-08-02 20:05:00 2014-08-02 21:25:00 85 3.7468 Aug
## year season Rainrate ReflectivityZ SYNOP
## 1: 2012 Less Wet 0.2520600 96.8723867 continuous light rain
## 2: 2012 Less Wet 0.1969400 4.8506507 continuous moderate drizzle
## 3: 2012 Less Wet 2.6429000 651.6283941 continuous moderate rain
## 4: 2012 Less Wet 4.1277400 534.8105921 continuous moderate rain
## 5: 2012 Less Wet 2.6884800 329.3062702 continuous moderate rain
## ---
## 1588: 2014 Less Wet 0.1945500 3.0687860 continuous moderate drizzle
## 1589: 2014 Less Wet 0.3350533 10.8817815 light drizzle and rain
## 1590: 2014 Less Wet 0.5526267 39.3640704 continuous moderate rain
## 1591: 2014 Less Wet 0.0716000 0.4111497 continuous light drizzle
## 1592: 2014 Less Wet 0.4664000 12.3140241 light drizzle and rain
## manualClass a b medDur
## 1: Light Rain 894.200196 1.6138602 113.0682
## 2: Moderate Drizzle 10.893310 0.7622195 113.0682
## 3: Moderate Rain 106.959000 1.2848527 113.0682
## 4: Moderate Rain 74.507797 1.2024312 113.0682
## 5: Moderate Rain 100.955529 1.1285168 113.0682
## ---
## 1588: Moderate Drizzle 15.537473 1.0350537 179.9367
## 1589: Moderate Drizzle 17.194142 0.8610099 179.9367
## 1590: Light Rain 44.383010 1.0559073 179.9367
## 1591: Light Drizzle 1.167704 0.4564574 179.9367
## 1592: Moderate Drizzle 24.371598 1.3000548 179.9367
head(df_events_results)
## id start_date end_date duration rain_acc month year
## 1: 1 2012-11-09 09:45:00 2012-11-09 09:55:00 15 0.2844 Nov 2012
## 2: 2 2012-11-09 13:00:00 2012-11-09 13:50:00 55 0.4796 Nov 2012
## 3: 3 2012-11-10 07:55:00 2012-11-10 14:05:00 375 23.1356 Nov 2012
## 4: 4 2012-11-11 05:50:00 2012-11-11 08:05:00 140 36.8400 Nov 2012
## 5: 5 2012-11-11 08:40:00 2012-11-11 09:00:00 25 4.4042 Nov 2012
## 6: 6 2012-11-11 10:15:00 2012-11-11 12:25:00 135 15.2808 Nov 2012
## season Rainrate ReflectivityZ SYNOP
## 1: Less Wet 0.25206 96.872387 continuous light rain
## 2: Less Wet 0.19694 4.850651 continuous moderate drizzle
## 3: Less Wet 2.64290 651.628394 continuous moderate rain
## 4: Less Wet 4.12774 534.810592 continuous moderate rain
## 5: Less Wet 2.68848 329.306270 continuous moderate rain
## 6: Less Wet 2.11760 189.234362 continuous moderate rain
## manualClass a b medDur
## 1: Light Rain 894.20020 1.6138602 113.0682
## 2: Moderate Drizzle 10.89331 0.7622195 113.0682
## 3: Moderate Rain 106.95900 1.2848527 113.0682
## 4: Moderate Rain 74.50780 1.2024312 113.0682
## 5: Moderate Rain 100.95553 1.1285168 113.0682
## 6: Light Rain 54.62488 1.1185234 113.0682
Ahora vamos a modificar este cálculo para obtener la media de la duración de los eventos en cada mes, pero considerando únicamente aquellos menores a 100 minutos.
df_events_results[duration<=100, medDur := mean(duration), by = month]
## id start_date end_date duration rain_acc month
## 1: 1 2012-11-09 09:45:00 2012-11-09 09:55:00 15 0.2844 Nov
## 2: 2 2012-11-09 13:00:00 2012-11-09 13:50:00 55 0.4796 Nov
## 3: 3 2012-11-10 07:55:00 2012-11-10 14:05:00 375 23.1356 Nov
## 4: 4 2012-11-11 05:50:00 2012-11-11 08:05:00 140 36.8400 Nov
## 5: 5 2012-11-11 08:40:00 2012-11-11 09:00:00 25 4.4042 Nov
## ---
## 1588: 1730 2014-08-01 09:25:00 2014-08-01 10:00:00 40 0.4486 Aug
## 1589: 1731 2014-08-02 07:45:00 2014-08-02 08:25:00 45 0.5080 Aug
## 1590: 1732 2014-08-02 09:25:00 2014-08-02 10:10:00 50 1.0062 Aug
## 1591: 1733 2014-08-02 18:55:00 2014-08-02 19:30:00 40 0.1470 Aug
## 1592: 1734 2014-08-02 20:05:00 2014-08-02 21:25:00 85 3.7468 Aug
## year season Rainrate ReflectivityZ SYNOP
## 1: 2012 Less Wet 0.2520600 96.8723867 continuous light rain
## 2: 2012 Less Wet 0.1969400 4.8506507 continuous moderate drizzle
## 3: 2012 Less Wet 2.6429000 651.6283941 continuous moderate rain
## 4: 2012 Less Wet 4.1277400 534.8105921 continuous moderate rain
## 5: 2012 Less Wet 2.6884800 329.3062702 continuous moderate rain
## ---
## 1588: 2014 Less Wet 0.1945500 3.0687860 continuous moderate drizzle
## 1589: 2014 Less Wet 0.3350533 10.8817815 light drizzle and rain
## 1590: 2014 Less Wet 0.5526267 39.3640704 continuous moderate rain
## 1591: 2014 Less Wet 0.0716000 0.4111497 continuous light drizzle
## 1592: 2014 Less Wet 0.4664000 12.3140241 light drizzle and rain
## manualClass a b medDur
## 1: Light Rain 894.200196 1.6138602 51.25000
## 2: Moderate Drizzle 10.893310 0.7622195 51.25000
## 3: Moderate Rain 106.959000 1.2848527 113.06818
## 4: Moderate Rain 74.507797 1.2024312 113.06818
## 5: Moderate Rain 100.955529 1.1285168 51.25000
## ---
## 1588: Moderate Drizzle 15.537473 1.0350537 49.07895
## 1589: Moderate Drizzle 17.194142 0.8610099 49.07895
## 1590: Light Rain 44.383010 1.0559073 49.07895
## 1591: Light Drizzle 1.167704 0.4564574 49.07895
## 1592: Moderate Drizzle 24.371598 1.3000548 49.07895
La asignación de una clave en el data.table permite optimizar los tiempos de búsqueda para ordenar, filtrar y buscar elementos en el objeto data.table. Esta indexación es similar a la que se utiliza en bases de datos formales. Pruebe la diferencia de tiempos cuando se designa una clave de tabla y cuando se omite este comando. Actividad: ¿Cómo se designa una clave combinada (Ejm. fecha inicio y fecha fin)?
setkey(df_events_results, id)
Cargaremos los dos archivos de precipitación y temperatura en data frames diferentes para trabajarlos.
df_prec <- read.table("file_precipitacion.txt", sep = "\t", stringsAsFactors = FALSE)
fechas <- strptime(df_prec$fecha, format="%Y-%m-%d %H:%M")
df_prec$fecha <- as.POSIXct(fechas)
df_temp = read.table("file_temperatura.txt", sep = "\t", stringsAsFactors = FALSE)
fechas <- strptime(df_temp$fecha, format="%Y-%m-%d %H:%M")
df_temp$fecha <- as.POSIXct(fechas)
Otra manera de crear un vector de fechas especÃfico, esta es la serie completa.
ts = seq(as.POSIXct("2010-01-01 00:00"), as.POSIXct("2015-01-01 00:00"),by = 300) #1800 sec = 30 min
df_ts <- as.data.frame(ts)
colnames(df_ts) <- c("fecha")
Ahora vamos a unir la serie completa con el conjunto de datos de los archivos.
df_prec_comp <- merge(df_ts,df_prec, by="fecha",all.x = TRUE)
summary(df_prec_comp)
## fecha precipitacion
## Min. :2010-01-01 00:00:00 Min. : 0.01
## 1st Qu.:2011-04-02 12:00:00 1st Qu.:12.49
## Median :2012-07-02 00:00:00 Median :25.03
## Mean :2012-07-02 00:00:00 Mean :25.01
## 3rd Qu.:2013-10-01 12:00:00 3rd Qu.:37.52
## Max. :2015-01-01 00:00:00 Max. :50.00
## NA's :15000
df_temp_comp <- merge(df_ts,df_temp, by="fecha",all.x = TRUE)
summary(df_temp_comp)
## fecha temperatura
## Min. :2010-01-01 00:00:00 Min. :-3.000
## 1st Qu.:2011-04-02 12:00:00 1st Qu.: 5.281
## Median :2012-07-02 00:00:00 Median :13.508
## Mean :2012-07-02 00:00:00 Mean :13.507
## 3rd Qu.:2013-10-01 12:00:00 3rd Qu.:21.740
## Max. :2015-01-01 00:00:00 Max. :30.000
## NA's :20000
Z <- stats::rnorm(10000)
summary(Z)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -3.71500 -0.70650 -0.02686 -0.01444 0.66620 3.50800
z <- cut(Z, breaks = -6:6)
head(z)
## [1] (-1,0] (1,2] (1,2] (0,1] (-2,-1] (-1,0]
## 12 Levels: (-6,-5] (-5,-4] (-4,-3] (-3,-2] (-2,-1] (-1,0] (0,1] ... (5,6]
z <- cut(Z, breaks = -6:6, labels = FALSE)
head(z)
## [1] 6 8 8 7 5 6
zz <- table(z)
zz
## z
## 3 4 5 6 7 8 9 10
## 13 214 1424 3463 3296 1336 242 12
dtm=as.POSIXct("2007-03-27 05:00", tz="GMT")+60*(1:240) #60 segundos
Count<-c(1:240)
DF<-data.frame(dtm,Count)
DF$min15<-cut(DF$dtm,breaks="15 min")
Min15_Avg<-aggregate(Count~min15,DF,sum)
library(ggplot2)
ggplot(df_events_results, aes(x = log(duration), y = log(rain_acc), color=factor(year))) + geom_point() + facet_wrap(~month)
ggplot(df_events_results, aes(x = log(duration), y = log(rain_acc), color=factor(year))) + geom_point() + facet_wrap(~manualClass)
ggplot(df_events_results, aes(x = factor(year), y = log(duration), color=factor(year))) + geom_boxplot() + facet_wrap(~manualClass)