Datos ordenados

    1. Importar los datos. En este caso son de excel y se usa la función read_excel(). El argumento skip permite omitir filas al momento de importar las bases de datos.
    1. Cambiar los nombres a través de la biblioteca janitor utilizando la función clean_names().
    1. Eliminar la última fila de la base de datos porque contiene totales de cada columna. Esta fila no es un individuo bajo análisis, en realidad es un resultado.
    1. Seleccionar las columnas de interés.
    1. Conversión de formato ancho a formato largo a través de la función pivot_longer(). Disminuyen las columnas y se aumentan las filas (total = 8 x 1122 = 8976). La nueva base de datos además del formato largo permitirá tener datos ordenados.
    1. Fraccionamiento de columna de nombre “variable” en cuatro nuevas columnas. La primera contiene información de el tipo de animal, la segunda y tercera haceb referencia a la edada del animal y la cuarta describe la unidad de tiempo.
    1. Coercionar la nueva variable “edad2” a tipo numérico. Buscamos con esto que en donde esté la palabra “ano” le asigne NA. En el siguiente paso podremos unir “edad1” y “edad2” en una sola columna que represente la edad. Además no se tiene en cuenta la variable “unidad”

Paso 1

# Bibliotecas: readr y tidyr
library(tidyverse)
library(readxl)
censo <- read_excel(path = "BOVINOS-CENSO-2020.xlsx", skip = 4)
censo
names(censo)
##  [1] "DEPARTAMENTO"                    "MUNICIPIO"                      
##  [3] "CODIGO MUNICIPIO"                "TERNERAS < 1 AÑO"               
##  [5] "TERNEROS < 1 AÑO"                "HEMBRAS 1 - 2 AÑOS"             
##  [7] "MACHOS 1 - 2 AÑOS"               "HEMBRAS 2 - 3 AÑOS"             
##  [9] "MACHOS 2 - 3 AÑOS"               "HEMBRAS > 3 AÑOS"               
## [11] "MACHOS > 3 AÑOS"                 "TOTAL BOVINOS - 2019"           
## [13] "No DE FINCAS 1 A 50"             "No DE FINCAS 51 A 100"          
## [15] "No DE FINCAS 101 A 500"          "No DE FINCAS 501 O MAS"         
## [17] "TOTAL FINCAS CON BOVINOS - 2019"

Paso 2

# 2. Editando nombres (limpiando)
library(janitor)
censo2 <- clean_names(censo)
names(censo2)
##  [1] "departamento"                  "municipio"                    
##  [3] "codigo_municipio"              "terneras_1_ano"               
##  [5] "terneros_1_ano"                "hembras_1_2_anos"             
##  [7] "machos_1_2_anos"               "hembras_2_3_anos"             
##  [9] "machos_2_3_anos"               "hembras_3_anos"               
## [11] "machos_3_anos"                 "total_bovinos_2019"           
## [13] "no_de_fincas_1_a_50"           "no_de_fincas_51_a_100"        
## [15] "no_de_fincas_101_a_500"        "no_de_fincas_501_o_mas"       
## [17] "total_fincas_con_bovinos_2019"

Paso 3

# 3. Eliminando última fila
censo3 <- censo2[-nrow(censo2), ]
censo3

Paso 4

# 4. Seleccionando variables
variables <- names(censo3)[c(1, 2, 4:11)]
variables
##  [1] "departamento"     "municipio"        "terneras_1_ano"   "terneros_1_ano"  
##  [5] "hembras_1_2_anos" "machos_1_2_anos"  "hembras_2_3_anos" "machos_2_3_anos" 
##  [9] "hembras_3_anos"   "machos_3_anos"
censo4 <- censo3[, variables]
censo4

Paso 5

  • Argumento a utilizar de la función pivot_longer():
    • data: base de datos sobre la cual se quiere operar
    • cols: son las columnas a tener en cuenta para la conversión de formato ancho a largo.
    • names_to: (carácter) nueva variable que contiene los nombres o encabezados de las columnas sobre las cuales se aplica la conversión de formato.
    • values_to: (carácter) nueva variable que contiene los valores de las celdas sobre las cuales se aplica la conversión de formato.
# 5. Formato ancho a largo con pivot_longer()
censo5 <- pivot_longer(data = censo4, cols = !c(departamento, municipio),
                       names_to = "variable", values_to = "animales")
dim(censo5)
## [1] 8976    4
censo5

Paso 6

  • Argumentos a utilizar de la función separate():
    • data: base de datos
    • col: variable de interés para fraccionamiento
    • into: (carácter) nombre de nuevas variables que resultan luego de fraccionar la columna del argumento “col”
    • sep: (carácter) separador. En este caso es el guión bajo (_)
    • remove: (lógico) permite controlar si se remueve o no la variable implicada en el fraccionamiento.
censo6 <- separate(data = censo5,
                   col = variable, 
                   into = c("tipo", "edad1", "edad2", "unidad"),
                   sep = "_",
                   remove = TRUE)
censo6

Paso 7

  • Argumento a utilizar con la función unite():
    • data: base de datos.
    • col: (carácter) nombre de nueva variable que se obtiene al unir otras columnas.
    • sep: (carácter) separador para la nueva variable.
    • remove: (lógico) permite remover las columnas implicadas en la unión.
# Conversión a numérico
censo6$edad2 <- as.numeric(censo6$edad2)
censo6
# Nueva base de datos
censo7 <- unite(data = censo6,
                col = "edad",
                edad1, edad2,
                sep = "-", 
                remove = TRUE)
censo7
# Eliminando la columna "unidad"
censo8 <- censo7[, -5]
censo8

Gráfico

censo8 %>% 
  filter(tipo %in% c("hembras", "machos")) %>% 
  ggplot(aes(x = animales, fill = tipo, color = tipo)) +
  facet_wrap(~departamento, scales = "free") +
  geom_density(alpha = 0.5) +
  scale_x_log10()

Concatenando procesos

  • La concatenación de diferentes tareas o procesos las vamos a ejecutar a través del operador de tubería “%>%”.
  • La función slice() permite filtrar por posición. La función slice() pertence a la biblioteca dplyr.
  • La función select() permite seleccionar columnas por nombre o posición. La función select() pertenece a la biblioteca dplyr.
  • La función mutate() permite crear o editar variables. La función mutate() pertenece a la biblioteca dplyr.
  • Paso extra: pasar las variables “departamento” y “municipio” a minúscula y luego la primera letra llevarla a mayúscula. Para convertir un texto (character) de mayúsculas a minúsculas R tiene la función tolower() y el proceso inverso se obtiene con la función toupper(). La biblioteca Hmisc con la función capitalize() permite tener la primera letra en mayúscula.
library(tidyverse)
library(readxl)
library(janitor)
library(Hmisc)
data_censo <-
  read_excel(path = "BOVINOS-CENSO-2020.xlsx", skip = 4)  %>%
  clean_names() %>%
  slice(-1123) %>%
  select(departamento, municipio, terneras_1_ano:machos_3_anos) %>%
  pivot_longer(
    cols = !c(departamento, municipio),
    names_to = "variable",
    values_to = "animales"
  ) %>%
  separate(
    col = variable,
    into = c("tipo", "edad1", "edad2", "unidad"),
    sep = "_",
    remove = TRUE
  ) %>%
  mutate(
    edad2 = as.numeric(edad2),
    departamento = capitalize(tolower(departamento)),
    municipio = capitalize(tolower(municipio)),
    tipo = capitalize(tipo)
  ) %>%
  unite(col = "edad",
        edad1,
        edad2,
        sep = "-",
        remove = TRUE) %>% 
  select(-unidad)

data_censo  

Exportando datos ordenados

write_csv(x = data_censo, file = "censo_ordenado.csv")

Anexo

datos_julian <- read_csv(file = "BasesDatos_Actividad1/Evaluaciones_Agropecuarias_Municipales_EVA - Julian.csv")


datos_laura <- read_csv(file = "BasesDatos_Actividad1/estadisticas_gandao - Laura.csv")

datos_yuliana <- read_csv(file = "BasesDatos_Actividad1/Caracterizaci_n_de_Proyectos_Integrales_de_Desarrollo_Agropecuario_y_Rural__PIDAR_ - Yuliana.csv")


# Estructura de datos
str(datos_julian)
## tibble [206,068 x 17] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ CÓD. 
## DEP.                                  : num [1:206068] 15 25 25 54 54 68 25 25 54 68 ...
##  $ DEPARTAMENTO                                 : chr [1:206068] "BOYACA" "CUNDINAMARCA" "CUNDINAMARCA" "NORTE DE SANTANDER" ...
##  $ CÓD. MUN.                                    : num [1:206068] 15114 25754 25214 54405 54518 ...
##  $ MUNICIPIO                                    : chr [1:206068] "BUSBANZA" "SOACHA" "COTA" "LOS PATIOS" ...
##  $ GRUPO 
## DE CULTIVO                           : chr [1:206068] "HORTALIZAS" "HORTALIZAS" "HORTALIZAS" "HORTALIZAS" ...
##  $ SUBGRUPO 
## DE CULTIVO                        : chr [1:206068] "ACELGA" "ACELGA" "ACELGA" "ACELGA" ...
##  $ CULTIVO                                      : chr [1:206068] "ACELGA" "ACELGA" "ACELGA" "ACELGA" ...
##  $ DESAGREGACIÓN REGIONAL Y/O SISTEMA PRODUCTIVO: chr [1:206068] "ACELGA" "ACELGA" "ACELGA" "ACELGA" ...
##  $ AÑO                                          : num [1:206068] 2006 2006 2006 2006 2006 ...
##  $ PERIODO                                      : chr [1:206068] "2006B" "2006B" "2006B" "2006B" ...
##  $ Área Sembrada
## (ha)                          : num [1:206068] 2 82 2 3 1 1 72 2 1 1 ...
##  $ Área Cosechada
## (ha)                         : num [1:206068] 1 80 2 3 1 1 70 2 1 1 ...
##  $ Producción
## (t)                              : num [1:206068] 1 1440 26 48 5 6 1260 34 5 6 ...
##  $ Rendimiento
## (t/ha)                          : num [1:206068] 1 18 17.3 16 10 ...
##  $ ESTADO FISICO PRODUCCION                     : chr [1:206068] "FRUTO FRESCO" "FRUTO FRESCO" "FRUTO FRESCO" "FRUTO FRESCO" ...
##  $ NOMBRE 
## CIENTIFICO                          : chr [1:206068] "BETA VULGARIS" "BETA VULGARIS" "BETA VULGARIS" "BETA VULGARIS" ...
##  $ CICLO DE CULTIVO                             : chr [1:206068] "TRANSITORIO" "TRANSITORIO" "TRANSITORIO" "TRANSITORIO" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   `CÓD. 
##   .. DEP.` = col_double(),
##   ..   DEPARTAMENTO = col_character(),
##   ..   `CÓD. MUN.` = col_double(),
##   ..   MUNICIPIO = col_character(),
##   ..   `GRUPO 
##   .. DE CULTIVO` = col_character(),
##   ..   `SUBGRUPO 
##   .. DE CULTIVO` = col_character(),
##   ..   CULTIVO = col_character(),
##   ..   `DESAGREGACIÓN REGIONAL Y/O SISTEMA PRODUCTIVO` = col_character(),
##   ..   AÑO = col_double(),
##   ..   PERIODO = col_character(),
##   ..   `Área Sembrada
##   .. (ha)` = col_double(),
##   ..   `Área Cosechada
##   .. (ha)` = col_double(),
##   ..   `Producción
##   .. (t)` = col_double(),
##   ..   `Rendimiento
##   .. (t/ha)` = col_double(),
##   ..   `ESTADO FISICO PRODUCCION` = col_character(),
##   ..   `NOMBRE 
##   .. CIENTIFICO` = col_character(),
##   ..   `CICLO DE CULTIVO` = col_character()
##   .. )
str(datos_laura)
## tibble [5 x 24] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ AÑO                                    : num [1:5] 2014 2012 2011 2013 2015
##  $ INVENTARIO GANADO BOVINO MACHOS        : num [1:5] 263 251 273 247 283
##  $ INVENTARIO GANADO BOVINO HEMBRAS       : num [1:5] 574 606 623 578 591
##  $ TOTAL INVENTARIO GANADO BOVINO         : num [1:5] 837 857 897 826 874
##  $ AREA EN PASTOS HAS                     : num [1:5] 724 688 697 717 758
##  $ N° CABEZAS  POR HA                     : num [1:5] 116 124 129 115 115
##  $ NATALIDAD                              : num [1:5] 51 51 54 50.3 53.1
##  $ PRODUCCIÓN LECHE LTS/AÑO               : chr [1:5] "170.994.379" "170.274.508" "195.810.769" "157.730.899" ...
##  $ PRODUCCIÓN LECHE LT/DÍA                : num [1:5] 25 25 27 26 27
##  $ PRECIO PROMEDIO LECHE $LT/AÑO          : num [1:5] 7370 7070 7015 6950 7976
##  $ SACRIFICIO ANIMAL MACHO                : num [1:5] 5.3 5.05 7.13 4.9 5.59
##  $ SACRIFICIO ANIMAL HEMBRA               : num [1:5] 47.3 50.9 42.2 42.6 45.6
##  $ TOTAL SACRIFICIO                       : num [1:5] 52.6 55.9 49.3 47.5 51.2
##  $ PRECIO CARNE $/KG PIE MACHO            : num [1:5] 3172 2623 2434 2680 3153
##  $ PRECIO CARNE $/KG PIE HEMBRA           : num [1:5] 2.42 2.08 1.93 2.35 2.61
##  $ N° PREDIOS GANADERÍA BOVINA            : num [1:5] 13.8 13.4 13 13.6 14.1
##  $ PREDIOS < 50 BOVINOS - PREDIOS         : num [1:5] 9.41 9.16 8.75 9.26 10.23
##  $ PREDIOS  51 - 100 BOVINOS - PREDIOS    : num [1:5] 2.09 2.03 1.94 2.06 1.9
##  $ PREDIOS  101 - 250 BOVINOS - PREDIOS   : num [1:5] 1.52 1.49 1.42 1.5 1.34
##  $ PREDIOS  > 251 BOVINOS - PREDIOS       : num [1:5] 749 730 697 737 615
##  $ INGRESO PRODUCCIÓN LECHE $/AÑO         : num [1:5] 1.26e+11 1.20e+11 1.37e+11 1.10e+11 1.33e+11
##  $ PESO PROMEDIO ANIMAL SACRIFICADO MACHO : num [1:5] 467 458 454 480 456
##  $ PESO PROMEDIO ANIMAL SACRIFICADO HEMBRA: num [1:5] 364 372 368 368 375
##  $ INGRESO SACRIFICIO $/AÑO               : num [1:5] 4.96e+10 4.56e+10 3.79e+10 4.33e+10 5.27e+10
##  - attr(*, "spec")=
##   .. cols(
##   ..   AÑO = col_double(),
##   ..   `INVENTARIO GANADO BOVINO MACHOS` = col_double(),
##   ..   `INVENTARIO GANADO BOVINO HEMBRAS` = col_double(),
##   ..   `TOTAL INVENTARIO GANADO BOVINO` = col_double(),
##   ..   `AREA EN PASTOS HAS` = col_double(),
##   ..   `N° CABEZAS  POR HA` = col_double(),
##   ..   NATALIDAD = col_double(),
##   ..   `PRODUCCIÓN LECHE LTS/AÑO` = col_character(),
##   ..   `PRODUCCIÓN LECHE LT/DÍA` = col_double(),
##   ..   `PRECIO PROMEDIO LECHE $LT/AÑO` = col_double(),
##   ..   `SACRIFICIO ANIMAL MACHO` = col_double(),
##   ..   `SACRIFICIO ANIMAL HEMBRA` = col_double(),
##   ..   `TOTAL SACRIFICIO` = col_double(),
##   ..   `PRECIO CARNE $/KG PIE MACHO` = col_double(),
##   ..   `PRECIO CARNE $/KG PIE HEMBRA` = col_double(),
##   ..   `N° PREDIOS GANADERÍA BOVINA` = col_double(),
##   ..   `PREDIOS < 50 BOVINOS - PREDIOS` = col_double(),
##   ..   `PREDIOS  51 - 100 BOVINOS - PREDIOS` = col_double(),
##   ..   `PREDIOS  101 - 250 BOVINOS - PREDIOS` = col_double(),
##   ..   `PREDIOS  > 251 BOVINOS - PREDIOS` = col_double(),
##   ..   `INGRESO PRODUCCIÓN LECHE $/AÑO` = col_double(),
##   ..   `PESO PROMEDIO ANIMAL SACRIFICADO MACHO` = col_double(),
##   ..   `PESO PROMEDIO ANIMAL SACRIFICADO HEMBRA` = col_double(),
##   ..   `INGRESO SACRIFICIO $/AÑO` = col_double()
##   .. )
str(datos_yuliana)
## tibble [232 x 19] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ BP                              : num [1:232] 1 2 3 4 5 6 7 8 9 10 ...
##  $ No. VP                          : num [1:232] 1 2 3 4 5 6 7 8 9 10 ...
##  $ Nombre Proyecto                 : chr [1:232] "Implementar un sistema de ganadería silvopastoril, doble propósito con la compra de 60 hembras preñadas (girola"| __truncated__ "Fortalecimiento del cultivo de arroz y caña panelera, con la implementación de tecnologías a partir de la dotac"| __truncated__ "Implementar un modelo piscícola para la producción de tilapia roja bajo el sistema de BIOFLOC en la vereda Mira"| __truncated__ "Mejorar las capacidades productivas para la agregación de valor mediante el mejoramiento de la infraestructura "| __truncated__ ...
##  $ Departamento                    : chr [1:232] "CAQUETA" "NARIÑO" "CAQUETA" "MAGDALENA" ...
##  $ Municipio                       : chr [1:232] "SAN VICENTE DEL CAGUÁN" "SAN ANDRÉS DE TUMACO" "SAN VICENTE DEL CAGUÁN" "ZONA BANANERA" ...
##  $ Total beneficiarios             : num [1:232] 46 19 52 150 97 35 27 25 30 77 ...
##  $ Hombres                         : num [1:232] 26 7 36 121 76 30 16 21 18 67 ...
##  $ Mujeres                         : num [1:232] 20 12 16 29 21 5 11 4 12 10 ...
##  $ Total Víctimas                  : num [1:232] 0 0 31 0 0 0 0 16 0 40 ...
##  $ Valor cofinanciado ADR          : num [1:232] 5.34e+08 1.85e+08 9.06e+08 2.95e+09 5.00e+08 ...
##  $ Valor encargo fiduciario        : chr [1:232] "N/A" "N/A" "N/A" "N/A" ...
##  $ Valor total cofinanciación ADR  : num [1:232] 5.34e+08 1.85e+08 9.06e+08 2.95e+09 5.00e+08 ...
##  $ Valor Contrapartida             : num [1:232] 1.16e+08 2.65e+08 1.05e+08 6.66e+08 5.81e+08 ...
##  $ Valor total proyecto            : num [1:232] 6.50e+08 4.50e+08 1.01e+09 3.61e+09 1.08e+09 ...
##  $ Hectáreas                       : num [1:232] 40 64 1 411 98 100 27 19 150 77 ...
##  $ Resolución                      : num [1:232] 1220 1234 1322 1307 1215 ...
##  $ Fecha resolución                : chr [1:232] "06/29/2018 12:00:00 AM" "07/06/2017 12:00:00 AM" "08/15/2017 12:00:00 AM" "08/04/2017 12:00:00 AM" ...
##  $ Vigencia                        : num [1:232] 2017 2017 2017 2017 2017 ...
##  $ Lineamiento de consejo directivo: chr [1:232] "N/A" "N/A" "N/A" "N/A" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   BP = col_double(),
##   ..   `No. VP` = col_double(),
##   ..   `Nombre Proyecto` = col_character(),
##   ..   Departamento = col_character(),
##   ..   Municipio = col_character(),
##   ..   `Total beneficiarios` = col_double(),
##   ..   Hombres = col_double(),
##   ..   Mujeres = col_double(),
##   ..   `Total Víctimas` = col_double(),
##   ..   `Valor cofinanciado ADR` = col_double(),
##   ..   `Valor encargo fiduciario` = col_character(),
##   ..   `Valor total cofinanciación ADR` = col_double(),
##   ..   `Valor Contrapartida` = col_double(),
##   ..   `Valor total proyecto` = col_double(),
##   ..   Hectáreas = col_double(),
##   ..   Resolución = col_double(),
##   ..   `Fecha resolución` = col_character(),
##   ..   Vigencia = col_double(),
##   ..   `Lineamiento de consejo directivo` = col_character()
##   .. )
dim(datos_julian)
## [1] 206068     17
dim(datos_laura)
## [1]  5 24
dim(datos_yuliana)
## [1] 232  19
head(datos_julian)

Pregunta clase

censo_prueba <- censo6
censo_prueba$unidad[is.na(censo_prueba$unidad)] <- "Año"
censo_prueba