library(learnr)
knitr::opts_chunk$set(echo = FALSE)
library(readr)
library(tidyr)
library(dplyr)
library(googledrive)
library(googlesheets4)
library(lubridate)
library(httr)
library(gradethis)
tutorial_options(exercise.checker = gradethis::grade_learnr)

temp = tempfile(fileext = ".xlsx")
dataURL <- "https://storage.googleapis.com/datos_cursos/Planilla%20presidencia.xlsx"
download.file(dataURL, destfile = temp, mode = 'wb')
planilla <- readxl::read_excel(temp)

planilla2 <- planilla %>% 
  mutate(fecha = dmy_hms(planilla$FechaPago)) %>% 
  select(Nombre, Cedula, Institucion, Rubro, Monto, fecha)

separados <- pivot_wider(data = planilla, 
                         names_from = Rubro, 
                         values_from = Monto)

temp2 <- tempfile(fileext = ".xlsx")
dataURL2 <- "https://storage.googleapis.com/datos_cursos/planillaNAs.xlsx"
download.file(dataURL2, destfile = temp2, mode = 'wb')
planillaNAs <- readxl::read_excel(temp2)

fecha_separada <- separate(data = planilla2, col = fecha,into = c("anio",
                                                                  "mes",
                                                                  "dia"),
                           sep = "-")
knitr::include_graphics(
  "https://storage.googleapis.com/datos_cursos/ixpantia_introR/ixpantia_logo.png"
  )

Dispersar y reorganizar

Datos: planilla

Este set de datos incluye información sobre los trabajadores de Presidencia Costa Rica en el segundo cuatrimestre del 2019. Contiene 6 variables o columnas y 230 observaciones.

glimpse(planilla) 

Descripción de las variables

| Variable | Descripcion | | :--------: | :-----------: | | Nombre | Nommbre del empleado | | Cedula | Cedula del empleado | | Institucion | Institucion en la que trabaja el empleado, en este caso Presidencia | | FechaPago | Fecha y hora de realizacion del pago | | Rubro | Rubro especifico de pago | | Monto | Monto girado al empleado |

Función dispersar

1. Cree un nuevo set de datos "disperso" utilizando la columna Nombre

El set de datos incluye varias observaciones para el mismo trabajador ya que el pago de cada trabajador se puede dividir en varios rubros. Utilice pivot_wider de tal forma que cree una columna para cada rubro o tipo de pago.

pivot_wider()
"values_from = Monto"
grade_result(
  pass_if(~ identical(unlist(.result),
                      unlist(pivot_wider(data = planilla,
                                         names_from = Rubro,
                                         values_from = Monto))),
          "¡Muy bien!")
)

Función reorganizar

2. Partiendo del set de datos disperso creado anteriormente vuelva al set de datos original

En el paso anterior creamos una base de datos donde se creo una columna para cada rubro de pago, este set de datos se llama separados. Ahora utilice pivot_longer() para volver al set de datos original. En la pista puede encontrar los nombres de las columnas escritos para facilitarle la escritura del código.

pivot_longer(data = separados, )
cols = c("CARRERA PROFESIONAL", "DISCRECIONALIDAD Y CONFIDENCIALIDAD COL 108",
         "DEDICACION EXCLUSIVA", "SALARIO BASE", "AUMENTOS ANUALES", 
         "HORAS EXTRA-P.Adeudados", "PROHIBICION", "SOBREPAGO POR ASIGNACION",
         "SUBSIDIO ENFERMEDAD REG SERV CIVIL", 
         "SUBSIDIO ENFERMEDAD NO REG SERV CIVIL")
"values_to = Monto"
grade_result(
  pass_if(~ identical(unlist(unname(.result)),
                      unlist(unname(
                        pivot_longer(
                          data = separados,
                          cols = c("CARRERA PROFESIONAL",
                                   "DISCRECIONALIDAD Y CONFIDENCIALIDAD COL 108",
                                   "DEDICACION EXCLUSIVA", "SALARIO BASE",
                                   "AUMENTOS ANUALES", "HORAS EXTRA-P.Adeudados",
                                   "PROHIBICION", "SOBREPAGO POR ASIGNACION",
                                   "SUBSIDIO ENFERMEDAD REG SERV CIVIL",
                                   "SUBSIDIO ENFERMEDAD NO REG SERV CIVIL"),
                          names_to = "Rubro", values_to = "Monto")))),
          "¡Excelente!")
)

Manejo de NA´s

Datos: planillaNAs2

Este set de datos es similar al visto anteriormente, solo que le faltan algunos datos, por lo que tiene NAs en distintas columnas.

glimpse(planillaNAs)

3. Complete los NAs de Monto y de Cedula

El set de datos planillaNAs tiene valores faltantes (NAs) en varias columnas, en este ejercicio debes reeplazar los valores faltantes de las variable Monto y Cedula

fill()
"Solo debes agregar una palabra al código que vimos antes"
grade_result(
  pass_if(~ identical(unlist(.result),
                      unlist(fill(planillaNAs, Monto, Cedula))),
          "¡Bien!")
)

4. Reemplace los NAs con 99

Los valores faltantes del set de datos están identificados con un "NA", pero esto puede complicar las cosas en algunos procesos. Cambie los "NAs" por 99.

replace_na()
"list(valor = 99)"
grade_result(
  pass_if(~ identical(unlist(.result),
                      unlist(replace_na(planillaNAs,
                                        list(valor = 99)))),
          "¡Buenísimo!")
)

Separar y unir

Datos: planilla2

Este set de datos es similar a planilla2 con la excepcion que en lugar de la columna FechaPago tiene l columna fecha que solo contiene la fecha del pago, no la hora.

glimpse(planilla2)

5. Separe la fecha en año, mes y dia

El set de datos contiene una columna llamada fecha, la cual representa la fecha completa al momento del pago. Ahora utilice la funcion separate() para separar esta variable en tres columnas distintas, año, mes y dia.

separate(data = planilla2, )
sep = "-"
grade_result(
  pass_if(~ identical(unlist(.result),
                      unlist(separate(data = planilla2,
                                      col = fecha,
                                      into = c("anio", "mes", "dia"),
                                      sep = "-"))),
          "¡Genial!")
)

6. Una la fecha que separamos en una sola columna

Anteriormente separamos la fecha en año, mes y dia. Este set de datos quedó guardado como fecha_separada. Ahora utilice la función unite() para unir la fecha en una sola columna, como estaba anteriormente.

unite(data = fecha_separada,  )
sep = "/"
grade_result(
  pass_if(~ identical(unlist(.result),
                      unlist(unite(data = fecha_separada,
                                   col = "FechaPago",
                                   anio:dia, sep = "/"))),
          "¡Muy bien!")
)


ixpantia/introR documentation built on Jan. 28, 2024, 8:03 a.m.