R/importar_sensesbit.R

Defines functions importar_sensesbit

Documented in importar_sensesbit

#'Importa datos del excel de resultados de SENSESBIT a R.
#'
#'¡MUY IMPORTANTE! Debes guardar el excel como .xlsx ya que por defecto se descarga como .xls
#'
#'Esta función elimina la última hoja de excel, porque está vacía.
#'
#'Los nombres de las columnas van a ser siempre los de la segunda fila del excel, salvo que la segunda fila esté vacía, que serán los de la primera fila.
#'
#' @param nombre_archivo El nombre del excel entre comillas, extensión incluida
#'
#' @return El resultado es un tible con una columna llamada "name" con los nombres de las sheets del excel, y una nested column llamada "value" con los datos contenidos en la sheet.
#'
#'@export

importar_sensesbit <- function(nombre_archivo) {

  library(tidyverse)
  library(openxlsx)

  datos <- loadWorkbook(file = nombre_archivo)

  #Elimino el ultimo elemento porque es una hoja vacia

  sheets_datos <- names(datos)[-length(names(datos))]

  #Importo todas las hojas contenidas en sheets_datos y las meto en un tibble

  datos_pre <- map(sheets_datos,  ~ read.xlsx(
    nombre_archivo,
    sheet = .x,
    startRow = 2
  )) %>%
    enframe() %>%
    mutate(name = sheets_datos)

  #Arreglo los nombres de las columnas. A veces estan en la segunda fila y
  #a veces en la primera y a veces en ambas. Uso el nombre de la segunda
  #fila. Si esta vacia uso el de la primera.

  colnames_row1 <- map(sheets_datos ,  ~ read.xlsx(
    nombre_archivo,
    sheet = .x,
    startRow = 1,
    rows = c(1,2),
    colNames = FALSE,
    skipEmptyRows = FALSE
  ) %>%
    mutate(across(everything(),
                  ~ case_when(is.na(.[2]) ~ .[1],
                              TRUE ~ .[2])))
  ) %>%
    enframe() %>%
    mutate(name = sheets_datos)

  #Les pongo a los datos los colnames correctos

  datos_ok <- map2(.x = datos_pre$value,
                   .y = colnames_row1$value,
                   ~ setNames(.x,.y[1,])
  )%>%
    enframe() %>%
    mutate(name = sheets_datos)

}
anmarsan/sandres documentation built on Sept. 20, 2022, 2:01 p.m.