11 de septiembre de 2018

Objetivos

  • Casos perdidos
    • missing o NA
  • Unión de múltiples bases de datos
  • Ejemplos

Casos perdidos

Casi todas las bases de datos tienen casos perdidos.

Los casos perdidos pueden tener diferentes orígenes:

  • Datos inexistentes
  • Errores de captura
  • Errores de codificación

missing en R

En R los valores perdidos se representan explícitamente con el valor lógico NA

  • Lo introducimos en consola con NA, SIN comillas.
  • Consultados con la función is.na(x)
    • Que para el vector x regresa un vector lógico en el que cada NA de x es TRUE

test de is.na()

Who’s missing?

suppressPackageStartupMessages(library(tidyverse))
x = c(1, -9999, NA)
perdidos <- data.frame(x = x, test= is.na(x))
perdidos
##       x  test
## 1     1 FALSE
## 2 -9999 FALSE
## 3    NA  TRUE

filter(is.na(x))

Filtrar filas con o sin NA

perdidos %>% 
  filter(is.na(x))
##    x test
## 1 NA TRUE
perdidos %>% 
  filter(!is.na(x))
##       x  test
## 1     1 FALSE
## 2 -9999 FALSE

drop_na(x)

Eliminar todas las filas en las que hay al menos un NA

perdidos %>% 
  drop_na()
##       x  test
## 1     1 FALSE
## 2 -9999 FALSE

na_if(x)

perdidos %>% 
  mutate(x = na_if(x, -9999))
##    x  test
## 1  1 FALSE
## 2 NA FALSE
## 3 NA  TRUE

Filtrado con expresiones regulares

Aplicación para cadenas parciales

df <- data.frame(cadena = c("Básica Primaria", 
                            "Básica Secundaria", 
                            "Ornitorrinco"))
df %>%   filter(cadena == "Básica")
## [1] cadena
## <0 rows> (or 0-length row.names)

Con REGEX simple

# Contiene "Básica"
df %>% filter(str_detect(cadena, "Básica"))
##              cadena
## 1   Básica Primaria
## 2 Básica Secundaria
# Contiene "nito"
df %>% filter(str_detect(cadena, "nito"))
##         cadena
## 1 Ornitorrinco

Con operadores especiales de REGEX

# Termina con "a"
df %>% filter(str_detect(cadena, "a$"))
##              cadena
## 1   Básica Primaria
## 2 Básica Secundaria
#Empieza con "B"
df %>% filter(str_detect(cadena, "^B"))
##              cadena
## 1   Básica Primaria
## 2 Básica Secundaria

Separar cadenas de caracteres en dos columnas

df %>% separate(cadena, into = c("Nivel", "Servicio"))
## Warning: Expected 2 pieces. Missing pieces filled with `NA` in 1 rows [3].
##          Nivel   Servicio
## 1       Básica   Primaria
## 2       Básica Secundaria
## 3 Ornitorrinco       <NA>