1 Lectura de datos

library(tidyverse)
datos <- read_csv("ejemplo.csv")
datos

2 Operaciones por filas

2.1 filter()

  • Ejemplo: filtrando sólo el año (year) 2000.
# Con corchetes: datos[datos$year == 2000, ]
datos %>% 
  filter(year == 2000)
  • Ejemplo: filtrando sólo el año 2000 y homicidios mayores a 70.
datos %>% 
  filter(year == 2000 & homicidio > 70)  

2.2 slice()

  • La diferencia de slice() con filter() es que la primera filtra filas en función de la posición. La segunda filtra filas en función de una o más condiciones.
  • Ejemplo: filtramos sólo las filas 1, 10 y 20.
datos %>% 
  slice(1, 10, 20)

2.3 arrange()

  • La función arrange() permite ordenar las filas de manera ascendente (por defecto) o descendente.
  • Ejemeplo: ordenando las filas por la variable “homicidio”.
datos %>% 
  arrange(homicidio)
  • Ejemplo: ordenando las filas por la variable “homicidio” de forma descendente. Se utiliza la función “desc()”.
datos %>% 
  arrange(desc(homicidio))

2.4 distinct()

  • Permite filtrar filas únicas. Por defecto sólo selecciona la columna implicada en el filtro de filas únicas o distintas.
  • Ejemplo: filtrando municipios diferentes o únicos
datos %>% 
  distinct(Municipio)
  • Podemos mantener las demás columnas a través del argumento .keep_all = TRUE.
datos %>% 
  distinct(Municipio, .keep_all = TRUE)

3 Operaciones por columnas

3.1 rename()

  • Permite renombrar una o más variables.
  • Ejemplo: cambiar el nombre del municipio a minúscula.
# Ejemplo con la función names()
prueba <- datos
names(prueba) <- c("municipio", "year", "homicidio")
prueba
  • Ahora utilizamos rename(): al lado derecho del igual está el nombre original y al lado izquierdo el nuevo nombre.
datos %>% 
  rename(municipio = Municipio)

3.2 set_names()

  • Permite cambiar el nombre a todas las columnas a través de un vector de caracteres. Similar a lo que hace names(), sin embargo, set_names() es compatible con el operador de tubería.
datos %>% 
  set_names(c("var1", "var2", "var3"))

3.3 select()

  • Permite seleccionar columnas a través del nombre o la posición.
datos %>% 
  select(year, homicidio)
  • Este código arroja el mismo resultado anterior:
datos %>% 
  select(-Municipio)
  • Seleccionar sólo las variables numéricas:
datos %>% 
  select(is.numeric)
  • Seleccionar las variables tipo caracter y además el homicidio:
datos %>% 
  select(is.character, homicidio)
  • También se puede usar el número de la columna:
datos %>% 
  select(1, 3)

4 mutate()

  • mutate() permite editar columnas o crear nuevas variables.
  • Ejemplo: crear una nueva columna de nombre “pais” con la etiqueta “Colombia”
datos %>% 
  mutate(pais = "Colombia")
  • Se aplica coerción sobre la variable “Municipio”, de character a factor:
datos %>% 
  mutate(Municipio = as.factor(Municipio))
  • Se resta el número 10 a la columna homicidio:
datos %>% 
  mutate(homicidio2 = homicidio - 10)
  • Puedo aplicar más de una edición o incluso crear y editar en la misma sentencia:
datos %>% 
  mutate(Municipio = as.factor(Municipio),
         homicidio2 = homicidio - 10)

5 Resumen de datos

5.1 count()

  • Esta función permite contar observaciones (filas) en función de una o más variables
datos %>% 
  count(year)
  • Conteo de registros (filas) por municipio y año
datos %>% 
  count(Municipio, year, name = "total")

5.2 group_by() + summarise()

  • Ejemplo: obtener resumen numérico por año que conste de promedio, desviación estándar, mínimo y máximo para la tasa de homicidio.
datos %>% 
  group_by(year) %>% 
  summarise(
    promedio_homicidio = mean(homicidio),
    desv_homicidio = sd(homicidio),
    minimo_homicidio = min(homicidio),
    maximo_homicidio = max(homicidio)
  ) 

5.3 ungroup()

  • Después de utilizar group_by() y summarise() se recomienda usar la función ungroup().
df_agrupada <- datos %>% 
  group_by(year)

# Consultando la clase de df_agrupada
class(df_agrupada)
## [1] "grouped_df" "tbl_df"     "tbl"        "data.frame"
# Tabla desagrupada
df_desagrupada <- df_agrupada %>% 
  ungroup()

# Consultando la clase de df_desagrupada
class(df_desagrupada)
## [1] "tbl_df"     "tbl"        "data.frame"
  • Se recomienda utilizar ungroup() después del group_by() + summarise():
datos %>% 
  group_by(Municipio) %>% 
  summarise(promedio = mean(homicidio)) %>% 
  ungroup()

5.4 group_by() + mutate()

datos %>% 
  group_by(Municipio) %>% 
  mutate(promedio = mean(homicidio)) %>% 
  ungroup()