Datos Censo Bovino 2020

library(tidyverse)
censo <- read_csv(file = "censo_ordenado.csv")
censo

Factores en R

  • Los factores representan variables categóricas o cualitativas.
  • Los factores posibiltan cambiar el orden de los niveles.
meses <- c("enero", "febrero", "marzo", "abril", "mayo", "junio", "enero")
meses
## [1] "enero"   "febrero" "marzo"   "abril"   "mayo"    "junio"   "enero"
  • Convirtiendo de character a factor con la función as.factor():
meses_factor1 <- as.factor(meses)
meses_factor1
## [1] enero   febrero marzo   abril   mayo    junio   enero  
## Levels: abril enero febrero junio marzo mayo
  • Con la función factor() es posible crear o convertir un character a un factor. Esta función facilita la ordenación de los niveles (levels). La función factor() también permite editar las etiquetas (labels) de la variable categórica.
meses_factor2 <- factor(x = meses,
                        levels = c("enero", "febrero", "marzo", "abril", "mayo", "junio"),
                        labels = c("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio"))
meses_factor2
## [1] Enero   Febrero Marzo   Abril   Mayo    Junio   Enero  
## Levels: Enero Febrero Marzo Abril Mayo Junio
  • Calculando la frecuencia absoluta (conteo) de “meses_factor2”:
table(meses_factor2)
## meses_factor2
##   Enero Febrero   Marzo   Abril    Mayo   Junio 
##       2       1       1       1       1       1
  • Calculando la frecuencia relativa (proporción) de “meses_factor2”. La función prop.table() se debe pasar sobre la función table():
# F. Relativa
prop.table(table(meses_factor2))
## meses_factor2
##     Enero   Febrero     Marzo     Abril      Mayo     Junio 
## 0.2857143 0.1428571 0.1428571 0.1428571 0.1428571 0.1428571
# Porcentaje
prop.table(table(meses_factor2)) * 100
## meses_factor2
##    Enero  Febrero    Marzo    Abril     Mayo    Junio 
## 28.57143 14.28571 14.28571 14.28571 14.28571 14.28571

Funciones Apply

  • Las funciones de la familia apply permiten operar por grupos, filas o columnas

tapply()

  • La función tapply() permite obtener resúmenes numéricos por grupos. Los siguientes son argumentos necesarios para esta función:
    • X: la variable numérica sobre la cual se desea aplicar la función. En este caso la variable de interés es el número de animales.
    • INDEX: grupo (factor) sobre el cual se desea operar. En este caso es el departamento.
    • FUN: función de interés. En este caso la sumatoria.
  • ¿Cuáles son los 5 departamentos con mayor número de bovinos en Colombia?
resultado <- tapply(X = censo$animales, INDEX = censo$departamento, FUN = sum)
resultado
##                 Amazonas                Antioquia                   Arauca 
##                      979                  3179947                  1187948 
##                Atlantico              Bogota d.c.                  Bolivar 
##                   248334                    35441                  1334353 
##                   Boyaca                   Caldas                  Caqueta 
##                  1234811                   444875                  2225152 
##                 Casanare                    Cauca                    Cesar 
##                  2141435                   343483                  1437588 
##                    Choco                  Cordoba             Cundinamarca 
##                   174056                  2133853                  1483917 
##                  Guainia                 Guaviare                    Huila 
##                     5461                   481695                   451652 
##               La guajira                Magdalena                     Meta 
##                   295128                  1454955                  2164484 
##                   Nariño       Norte de santander                 Putumayo 
##                   416849                   488353                   295354 
##                  Quindio                Risaralda San andres y providencia 
##                    83934                   106260                      624 
##                Santander                    Sucre                   Tolima 
##                  1652420                  1120865                   790423 
##          Valle del cauca                   Vaupes                  Vichada 
##                   568533                     1304                   260796
  • Es posible ordenar de mayor a menor o viceversa la variable “resultado”, utilizando la función sort(). La función sort() por defecto ordena los datos de menor a mayor, sin embargo, es posible ordenarlos de mayor a menor con el argumento “decreasing”:
sort(resultado, decreasing = TRUE)[1:5]
## Antioquia   Caqueta      Meta  Casanare   Cordoba 
##   3179947   2225152   2164484   2141435   2133853
  • Todo el procedimiento se puede realizar en una sola sentencia:
sort(tapply(X = censo$animales, INDEX = censo$departamento, FUN = sum),
     decreasing = TRUE)[1:5]
## Antioquia   Caqueta      Meta  Casanare   Cordoba 
##   3179947   2225152   2164484   2141435   2133853

apply(), sapply() y lapply()

  • Con las tres funciones se obtiene el mismo resultado.
  • El ejemplo lo vamos a hacer con la base de datos iris.
  • Estas funciones permiten operar por filas o columnas. En este ejemplo queremos la media de las cuatro primeras variables de iris.

apply()

  • Los argumentos de esta función son los siguientes:
    • X: base de datos sobre la cual se desea operar. En este caso las cuatro primeras columnas de iris.
    • MARGIN: recibe dos números, el número “1” para operar por filas y el número “2” para operar por columnas.
    • FUN: función a implementar sobre las filas o columnas. En este caso la media por columna.
apply(X = iris[, -5], MARGIN = 2, FUN = mean)
## Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
##     5.843333     3.057333     3.758000     1.199333

lapply()

  • Los argumentos son:
    • X: base de datos sobre la cual se desea operar.
    • FUN: función a implementar.
lapply(X = iris[, -5], FUN = mean)
## $Sepal.Length
## [1] 5.843333
## 
## $Sepal.Width
## [1] 3.057333
## 
## $Petal.Length
## [1] 3.758
## 
## $Petal.Width
## [1] 1.199333

sapply()

  • Los argumentos son:
    • X: base de datos sobre la cual se desea operar.
    • FUN: función a implementar.
sapply(X = iris[, -5], FUN = mean)
## Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
##     5.843333     3.057333     3.758000     1.199333

Funciones dplyr

filter()

  • Filtrar filas basado en una o más condiciones
  • Ejemplo: filtrar filas correspondientes sólo a Antioquia y Cundinamarca
censo %>% 
  filter(departamento %in% c("Antioquia", "Cundinamarca"))

arrange()

  • Permite ordenar las filas de forma ascendente o descendente por alguna variable de interés.
  • Por defecto la función arrange() ordena de menor a mayor.
censo %>% 
  arrange(animales)
  • Para ordenar de mayor a menor se utiliza la función desc():
censo %>% 
  arrange(desc(animales))

slice()

  • Permite filtrar filas por posición.
censo %>% 
  slice(1:10)

distinct()

  • Filtrar filas únicas o diferentes
  • Ejemplo: filtrar filas diferentes por departamento
  • Por defecto distinct() mantiene sólo la variable en cuestión, es decir, la variable sobre la cual se aplica el filtro.
  • Para mantener todas las variables se iguala a TRUE el argumento “.keep_all”
censo %>% 
  distinct(departamento, .keep_all = TRUE)

rename()

  • Permite editar nombres de una o más variables.
  • A la izquierda del igual (=) va el nuevo nombre y a la derecha estará el nombre “viejo”.
censo %>% 
  rename(Total = animales)

select()

  • Permite seleccionar columnas por nombre o posición
censo %>% 
  select(departamento, animales)
  • Es posible declarar las variables que NO se desean:
censo %>% 
  select(-sexo, -edad)

select_if()

  • Permite seleccionar columnas basado en una condición
  • Ejemplo: seleccionar sólo las variables de tipo character
censo %>% 
  select_if(is.character)

group_by() + summarise()

  • La función group_by() permite estructurar grupos sobre los cuales se desea realizar alguna operación estadística. El uso de esta función es común junto a la función summarise().
  • En la función summarise() a la izquierda del igual (=) estará la nueva variable y a la derecha del igual el precedimiento estadístico deseado, en este caso una sumatoria de los animales.
censo %>% 
  group_by(departamento) %>% 
  summarise(total = sum(animales))
  • ¿Cuáles son los 5 departamentos con mayor número de bovinos?
censo %>% 
  group_by(departamento) %>% 
  summarise(total = sum(animales)) %>% 
  ungroup() %>% 
  arrange(desc(total)) %>% 
  slice(1:5)
  • ¿Cuáles son los tres municipios de Antioquia con mayor número de animales por sexo? Es de vital importancia que después de agrupar se utilice la función ungroup() para eliminar los grupos.
censo %>% 
  filter(departamento == "Antioquia") %>% 
  group_by(municipio, sexo) %>% 
  summarise(total = sum(animales)) %>% 
  ungroup() %>% 
  arrange(desc(total)) %>% 
  slice(1:3)
  • ¿Cuáles son los municipios del Valle del Cauca cuyo valor mínimo en machos es mayor a 250 animales?
censo %>% 
  filter(departamento == "Valle del cauca") %>% 
  filter(sexo == "Machos") %>% 
  group_by(municipio) %>% 
  summarise(minimo = min(animales),
            maximo = max(animales),
            promedio = mean(animales)) %>% 
  ungroup() %>% 
  filter(minimo > 250) %>% 
  arrange(desc(minimo))

group_by() + summarise()

censo %>% 
  group_by(departamento) %>% 
  summarise(total = sum(animales))

group_by() + mutate()

censo %>% 
  group_by(departamento) %>% 
  mutate(total = sum(animales)) %>% 
  ungroup() %>% 
  mutate(prop = animales / total)