Capítulo7 Transformación: Valores Faltantes
## [1] "2025-09-15"
Fecha de la última revisión
7.1 Valores faltantes
- NA: Not Available
7.2 Creeamos un df para aclarar estas operaciones con NA en un data frame
- valores numéricos
- variable lógica TRUE/FALSE
- variable con NA y 0/1
df=tribble(~values, ~T_F, ~NA_not,
1, TRUE, NA,
0, TRUE, 1,
1, FALSE, NA,
0, FALSE, 1,
0, TRUE, 1,
0, FALSE, 0,
NA, NA, NA)
df
## # A tibble: 7 × 3
## values T_F NA_not
## <dbl> <lgl> <dbl>
## 1 1 TRUE NA
## 2 0 TRUE 1
## 3 1 FALSE NA
## 4 0 FALSE 1
## 5 0 TRUE 1
## 6 0 FALSE 0
## 7 NA NA NA
Ahora multiplicamos valores con la variable lógica.
## # A tibble: 7 × 4
## values T_F NA_not values_TF
## <dbl> <lgl> <dbl> <dbl>
## 1 1 TRUE NA 1
## 2 0 TRUE 1 0
## 3 1 FALSE NA 0
## 4 0 FALSE 1 0
## 5 0 TRUE 1 0
## 6 0 FALSE 0 0
## 7 NA NA NA NA
Multiplicamos la variable lógica con NA/1/0
## # A tibble: 7 × 4
## values T_F NA_not values_TF
## <dbl> <lgl> <dbl> <dbl>
## 1 1 TRUE NA NA
## 2 0 TRUE 1 1
## 3 1 FALSE NA NA
## 4 0 FALSE 1 0
## 5 0 TRUE 1 1
## 6 0 FALSE 0 0
## 7 NA NA NA NA
Multiplicamos valores con la variable NA/1/0
## # A tibble: 7 × 4
## values T_F NA_not valuesNA
## <dbl> <lgl> <dbl> <dbl>
## 1 1 TRUE NA NA
## 2 0 TRUE 1 0
## 3 1 FALSE NA NA
## 4 0 FALSE 1 0
## 5 0 TRUE 1 0
## 6 0 FALSE 0 0
## 7 NA NA NA NA
7.3 Contabilizar los NA
- ¿Cuántos vuelos tienen datos faltantes en horario_salida?
- ¿Qué otras variables tienen valores faltantes?
- ¿Qué representan estas filas?
## .
## FALSE TRUE
## 665297 8255
7.4 Seleccionar solamente los vuelos donde el “horario de salida” es desconocido
vuelos %>%
dplyr::select(anio, mes, dia, horario_salida, aerolinea) |>
filter(is.na(horario_salida)) %>%
group_by(dia) %>%
summarise(n = n())
## # A tibble: 31 × 2
## dia n
## <int> <int>
## 1 1 246
## 2 2 250
## 3 3 109
## 4 4 82
## 5 5 226
## 6 6 296
## 7 7 318
## 8 8 921
## 9 9 593
## 10 10 535
## # ℹ 21 more rows
7.5 Otras funciones: NA
- na.rm=TRUE
- !is.na() = is not NA, pq al frente tiene “!”
## # A tibble: 327,346 × 19
## anio mes dia horario_salida salida_programada atraso_salida
## <int> <int> <int> <int> <int> <dbl>
## 1 2013 1 1 517 515 2
## 2 2013 1 1 533 529 4
## 3 2013 1 1 542 540 2
## 4 2013 1 1 544 545 -1
## 5 2013 1 1 554 600 -6
## 6 2013 1 1 554 558 -4
## 7 2013 1 1 555 600 -5
## 8 2013 1 1 557 600 -3
## 9 2013 1 1 557 600 -3
## 10 2013 1 1 558 600 -2
## # ℹ 327,336 more rows
## # ℹ 13 more variables: horario_llegada <int>, llegada_programada <int>,
## # atraso_llegada <dbl>, aerolinea <chr>, vuelo <int>, codigo_cola <chr>,
## # origen <chr>, destino <chr>, tiempo_vuelo <dbl>, distancia <dbl>,
## # hora <dbl>, minuto <dbl>, fecha_hora <dttm>
#vuelos %>%
# drop_na(atraso_salida, atraso_llegada)
no_cancelados %>%
group_by(anio, mes, dia) %>%
summarise(mean = mean(atraso_salida))
## # A tibble: 365 × 4
## # Groups: anio, mes [12]
## anio mes dia mean
## <int> <int> <int> <dbl>
## 1 2013 1 1 11.4
## 2 2013 1 2 13.7
## 3 2013 1 3 10.9
## 4 2013 1 4 8.97
## 5 2013 1 5 5.73
## 6 2013 1 6 7.15
## 7 2013 1 7 5.42
## 8 2013 1 8 2.56
## 9 2013 1 9 2.30
## 10 2013 1 10 2.84
## # ℹ 355 more rows
vuelos %>%
group_by(anio, mes, dia) %>%
summarise(
mean = mean(atraso_salida, na.rm = TRUE),
max = max(atraso_salida, na.rm = TRUE),
n = n()
)
## # A tibble: 365 × 6
## # Groups: anio, mes [12]
## anio mes dia mean max n
## <int> <int> <int> <dbl> <dbl> <int>
## 1 2013 1 1 11.5 853 842
## 2 2013 1 2 13.9 379 943
## 3 2013 1 3 11.0 291 914
## 4 2013 1 4 8.95 288 915
## 5 2013 1 5 5.73 327 720
## 6 2013 1 6 7.15 202 832
## 7 2013 1 7 5.42 366 933
## 8 2013 1 8 2.55 188 899
## 9 2013 1 9 2.28 1301 902
## 10 2013 1 10 2.84 1126 932
## # ℹ 355 more rows
Reemplazar los NA por “0” en el archivo de datos
Cual es el problema de reemplazar los NA por 0?
## datos_NA
## 1 1
## 2 NA
## 3 3
## 4 4
## 5 5
## 6 6
## 7 7
## 8 8
## 9 NA
## 10 10
## 11 11
## 12 12
# reemplazar NA con 0
datos_NA_df = datos_NA_df %>%
mutate(datos_0 = if_else(is.na(datos_NA), 99, datos_NA))
datos_NA_df
## datos_NA datos_0
## 1 1 1
## 2 NA 99
## 3 3 3
## 4 4 4
## 5 5 5
## 6 6 6
## 7 7 7
## 8 8 8
## 9 NA 99
## 10 10 10
## 11 11 11
## 12 12 12
AHORA
Alguin le dio un set de datos en Excel con O cuando no tenian datos
reemplace los valores de “zero” con NA con la funcion if_else de dplyr
library(dplyr)
Datos_Excel = c(1, 0, 3:8, 0, 10:12)
Datos_df = as.data.frame(Datos_Excel)
Datos_df = Datos_df %>%
mutate(Datos_NA = dplyr::if_else(Datos_Excel == 0, NA, Datos_Excel))
Datos_df
## Datos_Excel Datos_NA
## 1 1 1
## 2 0 NA
## 3 3 3
## 4 4 4
## 5 5 5
## 6 6 6
## 7 7 7
## 8 8 8
## 9 0 NA
## 10 10 10
## 11 11 11
## 12 12 12