1 Objetivo

Este informe genera automáticamente tablas de distribución de frecuencias y gráficos para todas las variables del data frame.
Detecta si cada variable es categórica (caracter/factor, 0/1, o numérica con pocos valores distintos) o numérica continua, y aplica lo correspondiente.


2 Paquetes

Instalamos y cargamos los paquetes necesarios.
Si alguno no está en el sistema, se instalará de forma automática.

pkgs <- c("dplyr","ggplot2","janitor","purrr","tidyr","forcats","scales","knitr","tibble","readxl")
to_install <- setdiff(pkgs, rownames(installed.packages()))
if (length(to_install)) install.packages(to_install, dependencies = TRUE)
invisible(lapply(pkgs, require, character.only = TRUE))

3 Carga de datos

⚠️ Reemplace el nombre del archivo según corresponda.
Si su archivo es Excel (.xlsx), use read_excel().
Si es CSV, use read.csv().

# =========================
# Cargar la base de datos
# =========================

# Ejemplo si el archivo está en la misma carpeta del .Rmd:
# df <- read_excel("X1996_2002_valores_nominales_5_.xlsx")

# O bien si es CSV:
# df <- read.csv("X1996_2002_valores_nominales_5_.csv")

# Si está en otra carpeta, colocar la ruta completa:
# df <- read_excel("C:/Users/Juan/Desktop/X1996_2002_valores_nominales_5_.xlsx")

# Vista rápida
glimpse(df)
## function (x, df1, df2, ncp, log = FALSE)

4 Criterios de clasificación de variables

  1. Categóricas: character, factor, binarias 0/1, o numéricas con ≤ 12 valores distintos (útil para variables como año con pocos niveles).
  2. Numéricas: el resto.

Creamos funciones auxiliares para automatizar tablas y gráficos.

# ¿Es binaria (0/1) una numérica?
is_binary01 <- function(x) {
  is.numeric(x) && all(na.omit(x) %in% c(0,1))
}

# ¿Tratar como categórica?
treat_as_categorical <- function(x) {
  is.character(x) || is.factor(x) || is_binary01(x) ||
    (is.numeric(x) && dplyr::n_distinct(na.omit(x)) <= 12)
}

# Tabla de frecuencias para categóricas
freq_table_cat <- function(x) {
  janitor::tabyl(x) |>
    janitor::adorn_totals("row") |>
    janitor::adorn_pct_formatting(digits = 1)
}

# Tabla de frecuencias por clases para numéricas
freq_table_num <- function(x, n_bins = 8) {
  # Si todos los valores son iguales, devolvemos una tabla trivial
  if (length(unique(na.omit(x))) < 2) {
    return(tibble::tibble(clase = as.character(unique(x)),
                          n = length(x),
                          percent = "100.0%"))
  }
  brks <- pretty(x, n = n_bins)
  xb <- cut(x, breaks = brks, include.lowest = TRUE, right = FALSE)
  janitor::tabyl(xb) |>
    dplyr::rename(clase = xb) |>
    janitor::adorn_totals("row") |>
    janitor::adorn_pct_formatting(digits = 1)
}

5 Resultados por variable

A continuación, para cada variable del data frame:

  • Si es categóricaTabla de frecuencias y Gráfico de barras.
  • Si es numéricaTabla por clases, Histograma y Boxplot.
vars <- names(df)
cat("Variables detectadas: ", paste(vars, collapse = ", "), "\n\n")

Variables detectadas:

for (v in vars) {
  x <- df[[v]]

  # Título de sección para cada variable
  cat("\n\n##", v, "\n")

  if (treat_as_categorical(x)) {
    cat("**Tipo detectado:** Categórica\n\n")

    # Tabla
    tb <- freq_table_cat(x)
    print(knitr::kable(tb, align = "lrr",
                       caption = paste("Tabla de frecuencias —", v)))

    # Gráfico de barras
    p_bar <- ggplot(data.frame(val = as.factor(x)), aes(val)) +
      geom_bar() +
      labs(x = v, y = "Frecuencia", title = paste("Gráfico de barras —", v)) +
      theme_minimal() +
      coord_flip()
    print(p_bar)

  } else {
    cat("**Tipo detectado:** Numérica continua\n\n")

    # Tabla por clases
    tb <- freq_table_num(x, n_bins = 8)
    print(knitr::kable(tb, align = "lrr",
                       caption = paste("Tabla de frecuencias por clases —", v)))

    # Histograma
    p_hist <- ggplot(data.frame(val = x), aes(val)) +
      geom_histogram(bins = 30) +
      labs(x = v, y = "Frecuencia", title = paste("Histograma —", v)) +
      theme_minimal()
    print(p_hist)

    # Boxplot
    p_box <- ggplot(data.frame(val = x), aes(y = val)) +
      geom_boxplot() +
      labs(x = NULL, y = v, title = paste("Boxplot —", v)) +
      theme_minimal()
    print(p_box)
  }
}

6 Cómo publicar en RPubs

  1. File > Knit Document para generar el HTML.
  2. En la pestaña de Viewer, clic en PublishRPubs.
  3. Elegí título/descripcion y confirmá.
  4. Guardá el link para compartir.

7 Notas finales

  • Si año tiene pocos valores, el informe lo tratará como categórico (útil para tablas y barras por año).
  • Podés cambiar la cantidad de clases de las numéricas modificando n_bins = 8 en freq_table_num().
  • Para datasets grandes, cerrá objetos que no uses y reiniciá la sesión si notás lentitud (Session > Restart R).