#'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)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.