library(tidyverse)
library(janitor)
library(readxl)
library(dplyr)
library(readr)
library(stringr)
library(purrr)
Índice que resume el comportamiento de los precios en el mercado min a nivel nacional, de los productos más utilizados en la actividad agrícola para las diferentes etapas de producción, en productos: fertilizantes, entre simples y compuestos; plaguicidas entre herbicidas, fungicidas e insecticidas y; otros insumos entre coadyuvantes, reguladores fisiológicos y molusquicidas; tomando como período de referencia los precios en enero de 2021, cuando el índice toma el valor de 100. Para apoyo en la toma de decisiones por parte de los actores del sector.
df_insumos <- read_csv("01-datos/tablas-actividad-01/_ndice_de_precios_de_insumos_agr_colas_20250315.csv")
df_insumos
Las variables (insumos) están puestos como columnas; en esta tabla los totales están puestos como variables lo cual es innecesario porque se puede calcular aparte; y a las fechas debemos hacerlas correspondientes a los “insumos”.
Lo que haría sería pivotear la tabla para que los insumos puestos en las columnas me queden en una sola variable y eliminaría los totales ya que esto el cálculo se puede hacer aparte.
Utolicé subset, en R permite seleccionar o eliminar columnas de un marco de datos según sus nombres. Para eliminar varias columnas usando subset(), simplemente especifique el marco de datos y las columnas que desea conservar, omitiendo las que desea eliminar. Conoce más aquí
df_insumos_ordenado <-
df_insumos <-
subset(df_insumos, select = -c(2, 3, 4, 5, 6, 7, 8, 9, 10, 56, 57, 58)) |>
pivot_longer(cols = -Fecha,
names_to = "insumo",
values_to = "indice") |>
rename(fecha = Fecha) |>
select(insumo, fecha, indice) |>
pivot_wider(names_from = fecha,
values_from = indice) |>
pivot_longer(cols = -insumo,
names_to = "fecha",
values_to = "indice"
)
df_insumos_ordenado
Realizé un pivoteo ancho porque me di cuenta que la tabla seguía teniendo un error y es que la fecha quedaba de “principal” es decir se repetía cada valor, pero lo que debe ser es que se repita “insumos”, es decir que esta intercambie de columna con fecha. Entonces lo que hice de nuevo fue pivotearla a formato largo para establecer ese cambio y así dejar bien las observaciones. Luego simplemente renombré y puedo decir que ya está la tabla organizada
Este dato, tienes por objetivo definir operática y técnicamente los procedimientos relacionados con el registro de usuarios del servicio público de extensión, agropecuaria, y el método de clasificación, con el fin de facilitar la localización y la priorización del servicio público de extensión agropecuaria, así como para cubrir otras necesidades y llevar un control de todas las personas que activamente, forman parte de Registro de Usuario de Extensión Agropecuaria(RUEA) del Municipio de Puente Nacional – Santander.
df_usuario <- read.csv("01-datos/tablas-actividad-01/Registro_de_Usuario_de_Extensi_n_Agropecuaria_RUEA__20250315.csv")
df_usuario
Esta tabla sí cumple con los principios del “tidy data”.
## [1] "CONSECUTIVO" "FECHA.DE.ACTUALIZACIÒN" "VIGENCIA.PRESUPUESTAL"
## [4] "TIPO.DE.DOCUMENTO" "SEXO" "ETNIA"
## [7] "DISCAPACIDAD" "DEPARTEMENTO" "MUNICIPIO"
## [10] "CODIGO.DE.MUNICIPIO" "VEREDA" "LIENA.PRODUCTIVA"
## [13] "HECTAREAS"
Cada fila es una observación: Al revisar la tabla no hay ninguna observación que no cumpla esa función. Todas las filas tienen sus correpondientes observaciones.
Cada celda es un valor: Como corresponde se sigue cumpliendo. Los valores de las celdas son correctos. Corresponden a cada variable y observación.
En fin, no noto que algún principio se vea incumplido.
Lo que modificaría de ella sería las omitir los espacios, las tildes y las mayúsculas en las variables. Igualmente, dejaría solo con mayúscula inicial las observaciones.
Usé la función mutate para poder aplicarle a las columnas específicas esos cambios. Conoce más aquí
df_usuario_ordenado <-
df_usuario |>
rename(
consecutivo = CONSECUTIVO,
fecha_de_actualizacion = FECHA.DE.ACTUALIZACIÒN,
vigencia_presupuestal = VIGENCIA.PRESUPUESTAL,
tipo_de_documento = TIPO.DE.DOCUMENTO,
sexo = SEXO,
etnia = ETNIA,
discapacidad = DISCAPACIDAD,
departamento = DEPARTEMENTO,
municipio = MUNICIPIO,
codigo_de_municipio = CODIGO.DE.MUNICIPIO,
vereda = VEREDA,
linea_productiva = LIENA.PRODUCTIVA,
hectareas = HECTAREAS
) |>
mutate(across(c(tipo_de_documento, sexo, etnia, discapacidad, departamento, municipio, vereda, linea_productiva), str_to_sentence))
df_usuario_ordenado
Información referente al tráfico de voz expresado en minutos de Proveedores de Redes y Servicios Móviles de acuerdo con la Resolución 5076 de 2016. Periodo desde 2017 2T.
df_telefonia <- read.csv("01-datos/tablas-actividad-01/Telefon_a_M_vil_trafico_de_voz_por_proveedor_20250315.csv")
df_telefonia
En la variable año los valores no siguen un orden propio, pero al menos no los vemos puestos en las columnas. Aún así, se debe organizar la columna proveedor debido a que este es el “sujeto” y debe estar en primera vista para saber de qué se está hablando.
## [1] "AÑO" "TRIMESTRE" "PROVEEDOR"
## [4] "CONSUMO.PREPAGO" "CONSUMO.POSPAGO" "INGRESOS.OPERACIONALES"
Lo primero que hice fue pivotear a formato ancho para organizar “proveedor”. Luego aplico el pivoteo largo para traerla de nuevo correctamente. Borré la columna 7 porque se le asignaron valores NA que no tenían sentido. Renombré las columnas en minúsculas omitiendo los espacios.
Nuevamente, apliqué un pivoteo a formato ancho para luego poder reordenar los años en una columna con un pivoteo largo.
Finalmente, lo que hice fue cambiar el orden de las columnas teniendo en cuenta que el sujeto es el proveedor, así que esa sería la primera, año y las demás consecutivamente.
df_telefonia_ordenado <-
df_telefonia |>
pivot_wider(
names_from = PROVEEDOR,
values_from = -c(AÑO, TRIMESTRE, CONSUMO.PREPAGO, CONSUMO.POSPAGO, INGRESOS.OPERACIONALES)
) |>
pivot_longer(
cols = -c(AÑO, TRIMESTRE, CONSUMO.PREPAGO, CONSUMO.POSPAGO, INGRESOS.OPERACIONALES),
names_to = "proveedor"
) |>
subset(select = -c(7)) |>
rename(
año = AÑO,
trimestre = TRIMESTRE,
consumo_prepago = CONSUMO.PREPAGO,
consumo_pospago = CONSUMO.POSPAGO,
ingresos_operacionales = INGRESOS.OPERACIONALES
) |>
select(año, trimestre, consumo_prepago, consumo_pospago, ingresos_operacionales, proveedor) |>
pivot_wider(
names_from = c(año),
values_from = c(1)
) |>
pivot_longer(cols = -c(trimestre, consumo_prepago, consumo_pospago, ingresos_operacionales, proveedor),
names_to = "año"
) |>
subset(select = -c(7)) |>
select(proveedor, año, trimestre, consumo_prepago, consumo_pospago, ingresos_operacionales) |>
arrange(proveedor, año)
df_telefonia_ordenado
Y así quedaría transformada y organizada.
Se describen los eventos más relevantes del 2021 al primer semestre 2024.
Lo definiría como un insufrible error la columna Fecha por lo siguiente:
En la columna llamada “Fecha” se encuentran valores como: “11 de febrero” “Mayo a Agosto” “11 al 14 de noviembre” “Junio a diciembre” “Mayo - Junio” “Sabado 3 de Septiembre - de 2 pm a 5 pm” “Viernes 07 de octubre 2 pm a 5 pm” “Nov - Diciembre 2022”
Lo que propongo es crear dos nuevas columnas a partir de “Fecha”. Una que se llame “mes” e incluya los valores que solo contienen los caracteres de meses (ej., “Junio a diciembre”, “Mayo - Junio”). Y otra que se llame día e incluya los valores numéricos como “11” y “11 al 14”. Igualmente, que se elimine los agregados como, ” -“,”2022”, “- de 2 pm a 5 pm”, “Sábado”, “Viernes”. Entonces tendría que mutar esa columna, unir esos meses que están separados por a y -. Luego extraer los días y eliminar los agregados innecesarios. Sé que puede que se pierdan valores debido a que en el código se pueden omitir palabras al aplicar cambios a valores tan diferentes (además, en las columnas que solo existen meses al crear las nuevas columnas en “día” ese valor quedará vacío). Por ende, espero que aparezcan algunos en NA y aquellos que cumplan con las separaciones sí puedan estar correctos.
df_eventos_ordenado <-
df_eventos |>
mutate(across(c(Período), as.character)) |>
rename(
periodo = Período,
evento = Evento,
fecha = Fecha,
lugar = Lugar
) |>
mutate(
fecha = str_trim(fecha),
mes = str_extract(fecha, "(Enero|Febrero|Marzo|Abril|Mayo|Junio|Julio|Agosto|Septiembre|Octubre|Noviembre|Diciembre)(\\s*(a|\\-|de)\\s*(Enero|Febrero|Marzo|Abril|Mayo|Junio|Julio|Agosto|Septiembre|Octubre|Noviembre|Diciembre))?"),
mes = str_replace_all(mes, " - ", " a "),
mes = str_replace_all(mes, " a ", " a "),
dia = str_extract(fecha, "\\b\\d{1,2}(\\s*al\\s*\\d{1,2})?\\b")
) |>
select(-c(3))
df_eventos_ordenado
Volumen de precipitaciones mensuales obtenido en la red de estaciones hidrológicas de la Corporación Autónoma Regional de Cundinamarca - CAR.
df_precipitacion <- read.csv("01-datos/tablas-actividad-01/Precipitaciones_Totales_Mensuales_20250316.csv")
df_precipitacion
Enero a Diciembre puestos como variables cuando pueden caber en una sola “mes”, están afectando los valores de las celdas. Las otras variables están considerablemente bien.
Al querer realizar el pivoteo me daba error Enero (chr) y Abril (dbl), entonces lo que hice fue aplicar la función mutate para dejarlos a todos como caracter. Con esto ya pude realizar el pivoteo a formato largo. Por último, lo que hice fue renombarlas para omitir las tildes y los espacios.
df_precipitacion_ordenado <-
df_precipitacion |>
mutate(across(c(ENERO, FEBRERO, MARZO, ABRIL, MAYO, JUNIO, JULIO, AGOSTO, SEPTIEMBRE, OCTUBRE, NOVIEMBRE, DICIEMBRE), as.character)) |>
pivot_longer(
cols = -c(ESTACIÓN, CÓDIGO, X.N, Y.E, MUNICIPIO, CUENCA, AÑO),
names_to = "mes",
values_to = "mm"
) |>
rename(
estacion = ESTACIÓN,
codigo = CÓDIGO,
x_n = X.N,
y_e = Y.E,
municipio = MUNICIPIO,
cuenca = CUENCA,
año = AÑO
) |>
select(municipio, estacion, codigo, x_n, y_e, cuenca, año) |>
arrange(municipio)
df_precipitacion_ordenado
La tabla quedaría reorganizada de esa manera y cumpliría los principlios del “tidy data”.
df_rural <- read_csv("01-datos/tablas-actividad-01/Agricultura_y_Desarrollo_Rural_-_Evaluaci_n_Agr_cola_Departamento_de_Bol_var._20250319.csv")
df_rural
Los nombres de las columnas tienen saltos de línea (), lo que los hace un poco confusos y difíciles de administrar. Además, algunos nombres son demasiado largos y confusos, lo que no ayuda mucho. Otro aspecto que noté es que algunos valores numéricos, como los de las columnas “Área plantada (ha)” y “Rendimiento (t)”, se guardan como texto porque usan comas (por ejemplo, “2500” en lugar de 2500). Esto es un problema porque no podemos realizar cálculos directamente con ellos. También notamos valores faltantes en columnas importantes como “Área cosechada (ha)”, “Rendimiento (t)” y “Rendimiento (t/ha)”, lo que podría afectar el análisis que realicemos.
Para arreglar estos problemas podemos hacer lo siguiente, renombrar las columnas para que sean más claras y eliminar caracteres innecesarios, como los saltos de línea y convertir los datos numéricos al formato correcto, quitando las comas y asegurándonos de que sean números de verdad. También manejar los valores faltantes, eliminando las filas que no estén completas y revisar la estructura del dataset para asegurarnos de que las variables y observaciones estén organizadas de la manera más lógica.
## [1] "CodDpto" "Departamento" "CodMunicipio"
## [4] "Municipio" "Cultivo" "Periodo"
## [7] "Área Sembrada\n(ha)" "Área Cosechada\n(ha)" "Producción\n(t)"
## [10] "Rendimiento\n(t/ha)"
df_rural_ordenado <-
df_rural |>
rename(
cod_dpto = CodDpto,
cod_municipio = CodMunicipio,
departamento = Departamento,
municipio = Municipio,
cultivo = Cultivo,
periodo = Periodo,
area_sembrada = "Área Sembrada\n(ha)",
area_cosechada = "Área Cosechada\n(ha)",
produccion = "Producción\n(t)",
rendimiento = "Rendimiento\n(t/ha)"
) |>
mutate(across(c(cultivo), str_to_sentence)) |>
select(-c(10))
df_rural_ordenado
Has llegado al final. Presiona aquí para salir.