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)