Capítulo 1 Tablas

Esta primera sección abordará el manejo del contenido de las tablas. En específico, veremos como añadir medidas de resumen

Utilizaremos el dataset Oferta universitaria (institucional.csv) disponible en https://www.tuni.pe/datos

library(readr)

# importamos el archivo csv
df <- read_delim("institucional.csv", delim = "|", 
    escape_double = FALSE, locale = locale(encoding = "ISO-8859-1"), 
    trim_ws = TRUE)

Podemos observar un resumen de la estructura del dataset con el siguiente comando:

library(dplyr)

glimpse(df)
## Rows: 8,090
## Columns: 27
## $ ENTIDAD_CODIGO_INEI              <chr> "160000001", "160000001", "160000001"…
## $ ENTIDAD_NOMBRE_ENTIDAD           <chr> "Universidad Nacional Mayor de San Ma…
## $ ENTIDAD_TIPO_ENTIDAD             <chr> "Universidad", "Universidad", "Univer…
## $ ENTIDAD_TIPO_AUTORIZACION        <chr> "Licenciada", "Licenciada", "Licencia…
## $ ENTIDAD_TIPO_CONSTITUCION        <chr> "Pública", "Pública", "Pública", "Púb…
## $ ENTIDAD_TIPO_GESTION             <chr> "Público", "Público", "Público", "Púb…
## $ ENTIDAD_FECHA_RESOLUCION_ENTIDAD <chr> "12/05/1551", "12/05/1551", "12/05/15…
## $ ENTIDAD_DURACION_LICENCIAMIENTO  <dbl> 10, 10, 10, 10, 10, 10, 10, 10, 10, 1…
## $ PROGRAMA_CODIGO                  <dbl> 1, 2, 3, 4, 173, 5, 6, 7, 8, 9, 10, 1…
## $ PROGRAMA_CODIGO_GRUPO_1          <dbl> 4, 4, 4, 0, 4, 9, 9, 9, 8, 3, 3, 4, 2…
## $ PROGRAMA_NOMBRE_GRUPO_1          <chr> "Ciencias Administrativas y Derecho",…
## $ PROGRAMA_CODIGO_GRUPO_3          <chr> "413", "413", "416", "014", "419", "9…
## $ PROGRAMA_NOMBRE_GRUPO_3          <chr> "Gestión y Administración", "Gestión …
## $ PROGRAMA_NOMBRE                  <chr> "Administración", "Administración", "…
## $ PROGRAMA_NIVEL_ACADEMICO         <chr> "Carrera Profesional", "Maestría", "C…
## $ PROGRAMA_DURACION                <dbl> 500, 200, 500, 500, NA, NA, NA, NA, N…
## $ PROGRAMA_TIPO_AUTORIZACION_LOCAL <chr> "Reconocido por Lic.", "Reconocido po…
## $ LOCAL_CODIGO                     <chr> "SL01", "SL01", "SL01", "SL01", "SL02…
## $ LOCAL_DEPARTAMENTO               <chr> "Lima", "Lima", "Lima", "Lima", "Lima…
## $ LOCAL_PROVINCIA                  <chr> "Lima", "Lima", "Lima", "Lima", "Lima…
## $ LOCAL_DISTRITO                   <chr> "Lima", "Lima", "Lima", "Lima", "Lima…
## $ LOCAL_DIRECCION                  <chr> "Calle Germán Amezaga N° 375", "Calle…
## $ LOCAL_ES_PRINCIPAL               <chr> "SI", "SI", "SI", "SI", "NO", "NO", "…
## $ LOCAL_LONGITUD_UBICACION         <dbl> -7.708442e+16, -7.708442e+16, -7.7084…
## $ LOCAL_LATITUD_UBICACION          <dbl> -1.205603e+16, -1.205603e+16, -1.2056…
## $ LOCAL_CODIGO_UBIGEO_INEI_LOCAL   <dbl> 150101, 150101, 150101, 150101, 15010…
## $ LOCAL_MODALIDAD_ESTUDIO          <chr> "Presencial", "Presencial", "Presenci…

En este dataset, cada programa educativo es diferenciado por el campo PROGRAMA_CODIGO, en combinación con el campo ENTIDAD_CODIGO_INEI. Es decir, si quisiéramos contabilizar el número de programas por cada institución, se deberá de usar ambos campos. Veamos un ejemplo:

tabla <- df |>
  group_by(ENTIDAD_NOMBRE_ENTIDAD, PROGRAMA_NIVEL_ACADEMICO) |>
  summarise(N_Programas = length(unique(paste(ENTIDAD_CODIGO_INEI, PROGRAMA_CODIGO))))

tabla
## # A tibble: 262 × 3
## # Groups:   ENTIDAD_NOMBRE_ENTIDAD [96]
##    ENTIDAD_NOMBRE_ENTIDAD                     PROGRAMA_NIVEL_ACADE…¹ N_Programas
##    <chr>                                      <chr>                        <int>
##  1 Asociación Civil Universidad de Ciencias … Carrera Profesional             15
##  2 Escuela de Posgrado Newman S.A.C.          Maestría                        10
##  3 Escuela de Postgrado Gerens S.A.           Maestría                         2
##  4 Facultad de Teología Pontificia y Civil d… Carrera Profesional              3
##  5 Facultad de Teología Pontificia y Civil d… Doctorado                        1
##  6 Facultad de Teología Pontificia y Civil d… Maestría                         3
##  7 Facultad de Teología Pontificia y Civil d… Segunda Especialidad             1
##  8 Pontificia Universidad Católica del Perú   Carrera Profesional             66
##  9 Pontificia Universidad Católica del Perú   Doctorado                       23
## 10 Pontificia Universidad Católica del Perú   Maestría                       151
## # ℹ 252 more rows
## # ℹ abbreviated name: ¹​PROGRAMA_NIVEL_ACADEMICO

Podemos pasar del formato largo al formato ancho con la función spread:

library(tidyr)

tabla <- tabla |> spread(PROGRAMA_NIVEL_ACADEMICO, N_Programas)
tabla
## # A tibble: 96 × 5
## # Groups:   ENTIDAD_NOMBRE_ENTIDAD [96]
##    ENTIDAD_NOMBRE_ENTIDAD               `Carrera Profesional` Doctorado Maestría
##    <chr>                                                <int>     <int>    <int>
##  1 Asociación Civil Universidad de Cie…                    15        NA       NA
##  2 Escuela de Posgrado Newman S.A.C.                       NA        NA       10
##  3 Escuela de Postgrado Gerens S.A.                        NA        NA        2
##  4 Facultad de Teología Pontificia y C…                     3         1        3
##  5 Pontificia Universidad Católica del…                    66        23      151
##  6 Universidad Andina del Cusco                            22         7       14
##  7 Universidad Antonio Ruiz de Montoya                     22        NA       13
##  8 Universidad Autónoma de Ica S.A.C.                       9        NA       NA
##  9 Universidad Autónoma del Perú S.A.C.                    13        NA        4
## 10 Universidad Católica de Santa María                     37        12       44
## # ℹ 86 more rows
## # ℹ 1 more variable: `Segunda Especialidad` <int>

Tal y como está, esta tabla podría exportarse en formato xlsx con el paquete openxlsx. Sin embargo, imaginemos que necesitamos que la exportación se realice considerando el dato regional.

Esto se puede conseguir fácilmente con un bucle. Primero, construiremos la variable región, pues en el dataset están incluídos solo el departamento, la provincia y el distrito

df$Región <- df$LOCAL_DEPARTAMENTO

df$Región <- ifelse(df$LOCAL_DEPARTAMENTO=="Lima" & df$LOCAL_PROVINCIA=="Lima",
                    "Lima Metropolitana", df$Región)

df$Región <- ifelse(df$LOCAL_DEPARTAMENTO=="Lima" & df$LOCAL_PROVINCIA!="Lima",
                    "Lima Provincias", df$Región)

sort(unique(df$Región))
##  [1] "Amazonas"           "Áncash"             "Apurímac"          
##  [4] "Arequipa"           "Ayacucho"           "Cajamarca"         
##  [7] "Callao"             "Cusco"              "Huancavelica"      
## [10] "Huánuco"            "Ica"                "Junín"             
## [13] "La Libertad"        "Lambayeque"         "Lima Metropolitana"
## [16] "Lima Provincias"    "Loreto"             "Madre de Dios"     
## [19] "Moquegua"           "Pasco"              "Piura"             
## [22] "Puno"               "San Martín"         "Tacna"             
## [25] "Tumbes"             "Ucayali"

Ahora realizaremos las mismas tablas pero por cada región. Y las exportaremos a formato xlsx (Excel) con ayuda del paquete openxlsx

library(openxlsx)
for (i in unique(df$Región)) {

  tabla <- df |>
    filter(Región==i) |>
    group_by(ENTIDAD_NOMBRE_ENTIDAD, PROGRAMA_NIVEL_ACADEMICO) |>
    summarise(N_Programas = length(unique(paste(ENTIDAD_CODIGO_INEI, PROGRAMA_CODIGO))))
  
  tabla <- tabla |> spread(PROGRAMA_NIVEL_ACADEMICO, N_Programas)
  
  write.xlsx(tabla, paste0("Reporte - ",i,".xlsx"))
}

Podemos elaborar tablas que ayuden más al análisis. Qué tal una tabla por región la cual muestre la relación de instituciones; y que el número de oferta educativa nos sirva para elaborar un ranking. Es decir, ocupará el primer lugar la institución con mayor número de programas académicos, para cada región.

tab_R <- df |>
  group_by(Región, ENTIDAD_NOMBRE_ENTIDAD) |>
  summarise(N_Programas = length(unique(paste(ENTIDAD_CODIGO_INEI,PROGRAMA_CODIGO)))) |>
  arrange(Región, desc(N_Programas)) |>
  mutate(Ranking = length(N_Programas) - rank(N_Programas, ties.method = "max") + 1)

tab_R
## # A tibble: 132 × 4
## # Groups:   Región [26]
##    Región   ENTIDAD_NOMBRE_ENTIDAD                           N_Programas Ranking
##    <chr>    <chr>                                                  <int>   <dbl>
##  1 Amazonas Universidad Nacional Toribio Rodríguez de Mendo…          40       1
##  2 Amazonas Universidad Nacional Intercultural Fabiola Sala…           3       2
##  3 Apurímac Universidad Nacional de San Antonio Abad del Cu…          41       1
##  4 Apurímac Universidad Tecnológica de los Andes                      16       2
##  5 Apurímac Universidad Nacional Micaela Bastidas de Apurím…          10       3
##  6 Apurímac Universidad Nacional José María Arguedas                   6       4
##  7 Arequipa Universidad Nacional de San Agustín de Arequipa          240       1
##  8 Arequipa Universidad Católica de Santa María                      169       2
##  9 Arequipa Universidad Católica San Pablo                            29       3
## 10 Arequipa Universidad Tecnológica del Perú S.A.C.                   18       4
## # ℹ 122 more rows

Por ejemplo, para la región Arequipa tenemos el siguiente resultado:

tab_R |> filter(Región=="Arequipa")
## # A tibble: 7 × 4
## # Groups:   Región [1]
##   Región   ENTIDAD_NOMBRE_ENTIDAD                          N_Programas Ranking
##   <chr>    <chr>                                                 <int>   <dbl>
## 1 Arequipa Universidad Nacional de San Agustín de Arequipa         240       1
## 2 Arequipa Universidad Católica de Santa María                     169       2
## 3 Arequipa Universidad Católica San Pablo                           29       3
## 4 Arequipa Universidad Tecnológica del Perú S.A.C.                  18       4
## 5 Arequipa Universidad Continental S.A.C.                           17       5
## 6 Arequipa Universidad de San Martín de Porres                      12       6
## 7 Arequipa Universidad La Salle                                      8       7

Asimismo, también podemos observar qué puesto ocupa una institución en cada región, pues hay instituciones cuya oferta educativa abarca más de una región:

tab_R |> filter(ENTIDAD_NOMBRE_ENTIDAD=="Universidad César Vallejo S.A.C.")
## # A tibble: 7 × 4
## # Groups:   Región [7]
##   Región             ENTIDAD_NOMBRE_ENTIDAD           N_Programas Ranking
##   <chr>              <chr>                                  <int>   <dbl>
## 1 Callao             Universidad César Vallejo S.A.C.          14       2
## 2 La Libertad        Universidad César Vallejo S.A.C.          74       3
## 3 Lambayeque         Universidad César Vallejo S.A.C.          26       4
## 4 Lima Metropolitana Universidad César Vallejo S.A.C.          44      18
## 5 Piura              Universidad César Vallejo S.A.C.          25       3
## 6 San Martín         Universidad César Vallejo S.A.C.          22       2
## 7 Áncash             Universidad César Vallejo S.A.C.          24       3

Podemos obtener, también, información relacionada a otras variables. Por ejemplo, conocer cuál es la universidad más antigua para cada región.

df$ENTIDAD_FECHA_RESOLUCION_ENTIDAD <- as.Date(df$ENTIDAD_FECHA_RESOLUCION_ENTIDAD,
                                               format = "%d/%m/%Y")
df[grep("Universidad", df$ENTIDAD_NOMBRE_ENTIDAD),] |>
  arrange(ENTIDAD_FECHA_RESOLUCION_ENTIDAD) |>
  filter(LOCAL_ES_PRINCIPAL=="SI") |>
  group_by(Región) |>
  summarise(Universidad = first(ENTIDAD_NOMBRE_ENTIDAD), 
            FechaCreación = first(ENTIDAD_FECHA_RESOLUCION_ENTIDAD)) |>
  arrange(FechaCreación) |>
  print(n=26)
## # A tibble: 26 × 3
##    Región             Universidad                                  FechaCreación
##    <chr>              <chr>                                        <date>       
##  1 Lima Metropolitana Universidad Nacional Mayor de San Marcos     1551-05-12   
##  2 Ayacucho           Universidad Nacional de San Cristóbal de Hu… 1677-07-03   
##  3 Cusco              Universidad Nacional de San Antonio Abad de… 1692-06-01   
##  4 La Libertad        Universidad Nacional de Trujillo             1824-05-10   
##  5 Arequipa           Universidad Nacional de San Agustín de Areq… 1828-11-11   
##  6 Puno               Universidad Nacional del Altiplano           1856-08-29   
##  7 Ica                Universidad Nacional San Luis Gonzaga        1955-12-20   
##  8 Junín              Universidad Nacional del Centro del Perú     1959-12-16   
##  9 Loreto             Universidad Nacional de la Amazonía Peruana  1961-01-14   
## 10 Piura              Universidad Nacional de Piura                1961-03-03   
## 11 Cajamarca          Universidad Nacional de Cajamarca            1962-02-13   
## 12 Huánuco            Universidad Nacional Agraria de la Selva     1964-02-17   
## 13 Pasco              Universidad Nacional Daniel Alcides Carrión  1965-04-23   
## 14 Callao             Universidad Nacional del Callao              1966-09-02   
## 15 Lima Provincias    Universidad Nacional José Faustino Sánchez … 1968-12-31   
## 16 Lambayeque         Universidad Nacional Pedro Ruiz Gallo        1970-03-17   
## 17 Tacna              Universidad Nacional Jorge Basadre Grohmann  1971-08-26   
## 18 Áncash             Universidad Nacional Santiago Antúnez de Ma… 1977-05-24   
## 19 San Martín         Universidad Nacional de San Martín           1979-12-18   
## 20 Ucayali            Universidad Nacional de Ucayali              1979-12-18   
## 21 Apurímac           Universidad Tecnológica de los Andes         1984-06-07   
## 22 Tumbes             Universidad Nacional de Tumbes               1984-06-23   
## 23 Huancavelica       Universidad Nacional de Huancavelica         1990-06-20   
## 24 Madre de Dios      Universidad Nacional Amazónica de Madre de … 2000-07-05   
## 25 Amazonas           Universidad Nacional Toribio Rodríguez de M… 2000-09-18   
## 26 Moquegua           Universidad Nacional de Moquegua             2005-05-24