-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy path16-datetimes.Rmd
190 lines (114 loc) · 4.34 KB
/
16-datetimes.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
# Horas y fechas
```{r, include = FALSE}
library(tidyverse)
library(lubridate)
library(datos)
```
## 16.2 Creando horas/fechas{-#crear-horas}
### 16.2.4 Ejercicios{-#ejercicios-1624}
1. ¿Qué sucede si analizas una cadena de caracteres que contiene fechas inválidas?
```{r, eval = FALSE}
ymd(c("2010-10-10", "bananas"))
```
<div class="solucion">
<h3>Solución</h3>
Las cadenas de caracteres que contienen cadenas inválidas se convierten en `NA` y R arroja un mensaje de advertencia en el que se indica la candidad de veces que se encontró con este error:
```
[1] "2010-10-10" NA
Warning message:
1 failed to parse.
```
</div>
2. ¿Qué hace el argumento `tzone` (del inglés, _huso horario_ abreviado) para `today()`? ¿Por qué es importante?
<div class="solucion">
<h3>Solución</h3>
El argumento `tzone` permite indicar en qué huso horarios queremos la fecha actual. Por defecto entrega la de tu sistema, pero si queremos la de una zona horaria específica, podemos ajustarla con ese argumento:
```{r}
today()
today ("UTC")
today(tzone = "Australia/Sydney")
today(tzone = "Pacific/Honolulu")
```
</div>
3. Usa la función de __lubridate__ apropiada para analizar las siguientes fechas:
```{r}
d1 <- "Enero 1, 2010"
d2 <- "2015-Mar-07"
d3 <- "06-Jun-2017"
d4 <- c("Agosto 19 (2015)", "Julio 1 (2015)")
d5 <- "12/30/14" # Diciembre 30, 2014
```
<div class="solucion">
<h3>Solución</h3>
```{r}
mdy(d1)
ymd(d2)
dmy(d3)
mdy(d4)
mdy(d5)
```
</div>
## 16.3 Componentes fecha-hora{-#componentes-fecha}
### 16.3.4 Ejercicios{-#ejercicios-1634}
1. ¿Cómo cambia la distribución de las horas de los vuelos dentro de un día, a lo largo del año?
<div class="solucion">
<h3>Solución</h3>
</div>
2. Compara `horario_salida`, `salida_programada` and `atraso_salida`. ¿Son consistentes? Explica tus hallazgos.
<div class="solucion">
<h3>Solución</h3>
</div>
3. Compara `tiempo_vuelo` con la duración entre la salida y la llegada. Explica tus hallazgos. (Pista: considera la ubicación del aeropuerto).
<div class="solucion">
<h3>Solución</h3>
</div>
4. ¿Cómo cambia la demora promedio durante el curso de un día? ¿Deberías usar `horario_salida` o `salida_programada`? ¿Por qué?
<div class="solucion">
<h3>Solución</h3>
</div>
5. ¿En qué día de la semana deberías salir, si quieres minimizar las posibilidades de una demora?
<div class="solucion">
<h3>Solución</h3>
</div>
6. ¿Qué hace que la distribución de `diamantes$quilate` y `vuelos$salida_programada` sean similares?
<div class="solucion">
<h3>Solución</h3>
</div>
7. Confirma mi hipótesis de que salidas programas en los minutos 20-30 y 50-60 están casuadas por los vuelos programados que salen más temprano. Pista: crea una variable binaria que te diga si un vuelo tuvo o no demora.
<div class="solucion">
<h3>Solución</h3>
</div>
## 16.4 Lapsos de tiempo{-#lapsos-tiempo}
### 16.4.5 Ejercicios{-#ejercicios-1645}
1. ¿Por qué hay `months()` pero no `dmonths()` (_días del mes_)?
<div class="solucion">
<h3>Solución</h3>
</div>
2. Explica `days(nocturno * 1)` a alguien que apenas comienza a aprender R. ¿Cómo funciona?
<div class="solucion">
<h3>Solución</h3>
</div>
3. Crea un vector de fechas dando el primer día de cada mes en 2015. Crea un vector de fechas dando el primer día de cada mes del año _actual_.
<div class="solucion">
<h3>Solución</h3>
Una manera de resolver la primera pregunta sería obtener el primer día del primer mes y luego sumarle 11 meses:
```{r}
ymd("2015-01-01") + months(0:11)
```
La segunda pregunta podemos resolverla de las misma manera, pero obteniendo el primer día del año actual. Como queremos que esta respuesta sirva el próximo año, tenemos que generar ese primer día de manera automática (y no solo escribiendo `"2020-01-01"`). Para ello, podemos redondear hacia abajo la fecha actual. `floor_date()` permite indicar el criterio de redondeo:
```{r}
floor_date(today(), "year")
```
Ahora que obtuvimos el primer día del año actual, podemos sumarle los meses:
```{r}
floor_date(today(), "year") + months(0:11)
```
</div>
4. Crea una función en la cual, dado tu cumpleaños (como una fecha), retorne cuán viejo eres en años.
<div class="solucion">
<h3>Solución</h3>
</div>
5. ¿Por qué no puedes hacer funcionar a `(today() %--% (today() + years(1)) / months(1)` ?
<div class="solucion">
<h3>Solución</h3>
</div>