library(readr)
# importamos el archivo csv
df <- read_delim("institucional.csv", delim = "|",
escape_double = FALSE, locale = locale(encoding = "ISO-8859-1"),
trim_ws = TRUE)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

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