Importación de datos

CSV

El paquete readr es útil para una gran cantidad de datos.

read_csv : para leer archivos con coma (“,”) como separador.

read_csv2: para leer archivos con punto y coma (“;”) como separador.

read_tsv : para leer archivos con tabulador (“) como separador.

read_delim(,sep =’|’): para leer archivos con separador distintos como puede ser el símbolo ‘|’.

file.choose() permite elegir desde un cuadro de archivos.

misDatos <- read_tsv("http://www.sthda.com/upload/boxplot_format.txt")

# TIPO 1: archivo con solo datos sin encabezados
tusDatos <- read_csv(file.choose(),skip = 0,col_names = FALSE)

# TIPO 2: el archivo tiene una primera línea con encabezados + datos
tusDatos <- read_csv(file.choose(),skip = 0,col_names = TRUE)

# TIPO 3: encabezado con muchas filas (9 filas de texto antes del encabezado) + datos
tusDatos <- read_csv(file.choose(),skip = 8,col_names = TRUE)

Read.table

Cuando no sean demasiados datos. En este caso NO vas a leer las dos primeras filas y la tercera serán los nombres de las columnas (de las variables). Además el separador será en ; .

misDatos <- read.table(file.choose(), skip = 2, header =TRUE, sep =";")

Excel

Dentro de la librerias para trabajar con Excel:

readxl

install.packages("readxl")
library(readxl)
datos <- read_excel("informacion.xlsx")
#leer en forma interactiva desde una ventana de selección de archivos la primera hoja del archivo
datos <- read_excel(file.choose(), sheet=1)
#leer una hoja determinada
datos <- read_excel("archivo.xlsx", sheet="hoja 2")

Valores faltantes

Contabilizar por columnas

Contabilizar los NA de cada columna en un dataframe

na_count <-sapply(dataset, function(y) sum(length(which(is.na(y)))))
#ver una tabla con esta lista
na_count <- data.frame(na_count)

otra manera con sapply

sapply(dataset, function(x) sum(is.na(x)))
# pro: simple y no depende de otros paquetes
# cons: no define tipo de tabla

Contar el número de Na en el dataframe completo

sum(is.na(df))

Contar número de NA o blancos en cada columna.

colSums(is.na(data_set_name)|data_set_name == '')

Con tidyverse contamos el número de nulos en cada columna.

library(tidyverse)
library(purrr)

df %>%
    map_df(function(x) sum(is.na(x))) %>%
    gather(feature, num_nulls) %>%
    print(n = 100)

Otra opción para contabilizar todos los NA

library(tidyverse)
# Example data
df <- tibble(col1 = c(1, 2, 3, NA), 
             col2 = c(NA, NA, "a", "b"))

df %>% summarise_all(~ sum(is.na(.)))

Otra forma

dataset %>%
  select(everything()) %>%  # replace to your needs
  summarise_all(funs(sum(is.na(.))))

Contabilizar por filas

Contar en forma simple los NA a nivel de filas usando apply. Se cuenta caso a caso

apply(dataset, MARGIN=1, function(x) sum(is.na(x)))

Lo mismo con dplyr

dataset %>%
  rowwise %>%
  summarise(NA_per_row = sum(is.na(.)))

Reemplazar valores con NA

library(tibble)

library(tidyr)

install.packages("naniar")
library(naniar)

Reemplazar ciertos valores de una columna en un dataframe a NA

library(naniar)
dataset %>% replace_with_na(replace = list(columna = -99))
dataset %>% replace_with_na(replace = list(columna = "No hay"))

Reemplazar dos valores posibles (-99, -98) a NA

dataset %>%
  replace_with_na(replace = list(columna = c(-99, -98)))

Reemplazar los valores en todas las columnmas numericas, col1 y col2

dataset %>%
  replace_with_na(replace = list(col1 = c(-99,-98), col2 = c(-99, -98)))

Reemplaza en columna “CONCRETO” los valores de “NO APLICA” a “NA”.

datos <- as.data.frame(datos) %>%
  replace_with_na(datos, replace = list(CONCRETO = "NO APLICA"))

Eliminar valores con NA

Mostrar solo los registros con NA en la columna2

dataset %>% filter(is.na(columna2))

Excluir los registros con NA en la columna2

dataset %>% filter(!is.na(columna2))

Frecuencias

Quiere saber que datos se repite con mayor frecuencia? ** datos numericos

#instalar paquete fdth
#install.packages(fdth)
library(fdth)

#tabla de frecuencias
table(datos$variable)
#tabla de proporciones
table(datos$variable) /length(datos$variable)

Si queremos averiguar las frecuencias relativas, en vez de las absolutas.

prop.table (Tabla) # Proporción con respecto al total de los datos de la tabla
prop.table (Tabla, 1) # Proporción con respecto al total de los datos de cada fila
prop.table (Tabla, 2) # Proporción con respecto al total de los datos de cada columna

Si queremos averiguar el total de datos por fila o columna

margin.table(Tabla, 1) # Por fila
margin.table(Tabla, 2) # Por columna

Tabla de contingencia

Una tabla de contingencia revela relación entre variables

Tabla = table (datos$variable1, datos$variable2)

Comparadores lógicos

<  : for less than
>  : for greater than
<=  : for less than or equal to
>=  : for greater than or equal to
==  : for equal to each other
!=  : not equal to each other
%in% : group membership. For example, “value %in% c(2, 3)” means that value can takes 2 or 3.
is.na()  : is NA
!is.na()  : is not NA.

Operadores lógicos

value == 2|3 # significa que value es igual a 2 ó (|) 3. 
value %in% c(2, 3) # es equivalente a value == 2|3.
# & significa and. For example 
sex == "female" & edad > 25

Seleccionar filas de un dataframe

# extraer filas por posición
my_data %>% slice(1:6)

# extraer por un criterio
my_data %>% filter(Sepal.Length > 7)

# extraer por más de un criterio
my_data %>% filter(Sepal.Length > 6.7, Sepal.Width <= 3)
my_data %>% filter(Sepal.Length > 6.7, Species == "versicolor")

# usando operador OR (|)
my_data %>% filter(
  Sepal.Length > 6.7, 
  Species == "versicolor" | Species == "virginica"
  )
  
# equivalente %in%
my_data %>% filter(
  Sepal.Length > 6.7, 
  Species %in% c("versicolor", "virginica" )
  )
  
# crea un nuevo dataset removiendo la columna "Species":
my_data2 <- my_data %>% select(-Species)

Seleccionar filas al azar en un dataframe

set.seed(1234)
# Extract 5 random rows without replacement
my_data %>% sample_n(5, replace = FALSE)

# Extract 5% of rows, randomly without replacement
my_data %>% sample_frac(0.05, replace = FALSE)

Gráficos

Cambiar tamaño de textos en graficos utilice “cex” (character expansion ratio). El valor por defecto es 1. Para reducir el tamaño, usa un valor menor que 1, para aumentar el tamaño usa un valor mayor que 1.

cex.main : tamaño del título.

cex.lab: Tamaño de los textos que describen los ejes

cex.axis: Tamaño de los valores de los ejes

plot(x, y, main="Effects", xlab="Título eje X", ylab="Título eje Y", cex.main=1.25, cex.lab=1.5, cex.axis=0.75)