El presente documento tiene como objetivo realizar una exploración inicial y una transformación de variables de una base de datos relacionada con resultados educativos y laborales de diferentes programas académicos e instituciones.
Durante el ejercicio se realizará la importación de la información, la exploración de sus dimensiones y nombres, la identificación de los tipos de variables almacenados por R y diferentes procesos de transformación y codificación.
Además, se utilizarán elementos de Markdown para organizar y presentar la información de manera clara.
La base de datos se encuentra almacenada en un archivo de Excel. Para
realizar la importación se utiliza el paquete readxl,
específicamente la función read_excel().
library(readxl)
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
La base se importa desde el archivo de Excel y se utiliza la hoja
denominada Sheet1.
base <- read_excel(
"C:/Users/PC/Downloads/college_major_career_outcomes_2026.xlsx",
sheet = "Sheet1"
)
La base contiene información relacionada con instituciones educativas, programas académicos, ingresos, endeudamiento, ocupaciones y diferentes indicadores de resultados laborales.
La función head() permite visualizar las primeras
observaciones de la base de datos.
head(base, 5)
## # A tibble: 5 × 72
## program_id unitid opeid6 institution_name institution_control is_main_campus
## <chr> <dbl> <dbl> <chr> <chr> <dbl>
## 1 opeid031505… NA 31505 A - Technical C… Private, for-profit 1
## 2 opeid031505… NA 31505 A - Technical C… Private, for-profit 1
## 3 opeid031505… NA 31505 A - Technical C… Private, for-profit 1
## 4 493868-12.0… 493868 42833 A Better U Beau… Private, for-profit 1
## 5 177834-13.0… 177834 2477 A T Still Unive… Private, nonprofit 1
## # ℹ 66 more variables: institution_city <chr>, institution_state <chr>,
## # institution_region <chr>, institution_latitude <dbl>,
## # institution_longitude <dbl>, institution_is_hbcu <dbl>,
## # institution_admission_rate <dbl>, institution_avg_sat <dbl>,
## # institution_undergrad_enrollment <dbl>,
## # institution_tuition_in_state_usd <dbl>,
## # institution_tuition_out_state_us <dbl>, cip_code_4digit <dbl>, …
La función tail() permite visualizar las últimas
observaciones de la base.
tail(base, 5)
## # A tibble: 5 × 72
## program_id unitid opeid6 institution_name institution_control is_main_campus
## <chr> <dbl> <dbl> <chr> <chr> <dbl>
## 1 496520-51.3… 496520 42955 Zen Shiatsu Chi… Private, for-profit 1
## 2 495101-51.3… 495101 42753 Zion Massage Co… Private, for-profit 1
## 3 496423-12.0… 496423 43003 Zorganics Insti… Private, for-profit 1
## 4 496423-51.3… 496423 43003 Zorganics Insti… Private, for-profit 1
## 5 opeid039163… NA 39163 eClips School o… Private, for-profit 1
## # ℹ 66 more variables: institution_city <chr>, institution_state <chr>,
## # institution_region <chr>, institution_latitude <dbl>,
## # institution_longitude <dbl>, institution_is_hbcu <dbl>,
## # institution_admission_rate <dbl>, institution_avg_sat <dbl>,
## # institution_undergrad_enrollment <dbl>,
## # institution_tuition_in_state_usd <dbl>,
## # institution_tuition_out_state_us <dbl>, cip_code_4digit <dbl>, …
La función names() permite identificar las variables que
conforman la base de datos.
names(base)
## [1] "program_id" "unitid"
## [3] "opeid6" "institution_name"
## [5] "institution_control" "is_main_campus"
## [7] "institution_city" "institution_state"
## [9] "institution_region" "institution_latitude"
## [11] "institution_longitude" "institution_is_hbcu"
## [13] "institution_admission_rate" "institution_avg_sat"
## [15] "institution_undergrad_enrollment" "institution_tuition_in_state_usd"
## [17] "institution_tuition_out_state_us" "cip_code_4digit"
## [19] "cip_title" "cip_family_code"
## [21] "cip_family_title" "credential_level"
## [23] "credential_name" "distance_education"
## [25] "awards_year1" "awards_year2"
## [27] "outcomes_shared_across_campuses" "median_earnings_4yr_usd"
## [29] "earnings_cohort_size_4yr" "national_median_earnings_4yr_usd"
## [31] "national_p25_earnings_4yr_usd" "national_p75_earnings_4yr_usd"
## [33] "earnings_vs_national_pct" "median_earnings_1yr_usd"
## [35] "earnings_cohort_size_1yr" "median_earnings_5yr_usd"
## [37] "earnings_cohort_size_5yr" "not_working_count_5yr"
## [39] "count_above_hs_threshold_5yr" "count_working_in_state_5yr"
## [41] "median_debt_usd" "debt_borrower_count"
## [43] "median_monthly_payment_usd" "earnings_growth_pct_1yr_to_5yr"
## [45] "earnings_trajectory_category" "debt_to_earnings_1yr"
## [47] "debt_to_earnings_4yr" "payment_to_income_pct_1yr"
## [49] "pct_above_hs_threshold_5yr" "pct_working_5yr"
## [51] "pct_working_in_state_5yr" "linked_occupations_count"
## [53] "linked_occupations_in_bls" "largest_linked_occupation"
## [55] "largest_linked_occupation_soc" "occupation_typical_entry_educati"
## [57] "occupation_employment_2024_thous" "occupation_growth_pct_2024_34"
## [59] "occupation_growth_pct_max" "occupation_annual_openings_thous"
## [61] "occupation_median_wage_2024_usd" "linked_occupations_in_onet"
## [63] "occupations_using_ai_software" "ai_software_occupation_share"
## [65] "expert_system_occupation_share" "ai_tools_max_per_occupation"
## [67] "hot_technologies_mean_per_occupa" "ai_tool_examples"
## [69] "earnings_4yr_status" "earnings_1yr_status"
## [71] "earnings_5yr_status" "debt_status"
La función dim() permite conocer el número de filas y
columnas de la base.
dim(base)
## [1] 227980 72
La función class() permite identificar cómo está
almacenado el objeto completo en R.
class(base)
## [1] "tbl_df" "tbl" "data.frame"
La función str() permite conocer la estructura interna
de la base y observar cómo R almacenó cada variable.
Debido al tamaño de la base, se utiliza list.len = 72
para mostrar las variables sin necesidad de imprimir las observaciones
completas.
str(base, list.len = 72, vec.len = 1)
## tibble [227,980 × 72] (S3: tbl_df/tbl/data.frame)
## $ program_id : chr [1:227980] "opeid031505-51.07-1" ...
## $ unitid : num [1:227980] NA NA ...
## $ opeid6 : num [1:227980] 31505 ...
## $ institution_name : chr [1:227980] "A - Technical College" ...
## $ institution_control : chr [1:227980] "Private, for-profit" ...
## $ is_main_campus : num [1:227980] 1 1 ...
## $ institution_city : chr [1:227980] NA ...
## $ institution_state : chr [1:227980] NA ...
## $ institution_region : chr [1:227980] NA ...
## $ institution_latitude : num [1:227980] NA NA ...
## $ institution_longitude : num [1:227980] NA NA ...
## $ institution_is_hbcu : num [1:227980] NA NA ...
## $ institution_admission_rate : num [1:227980] NA NA ...
## $ institution_avg_sat : num [1:227980] NA NA ...
## $ institution_undergrad_enrollment: num [1:227980] NA NA ...
## $ institution_tuition_in_state_usd: num [1:227980] NA NA ...
## $ institution_tuition_out_state_us: num [1:227980] NA NA ...
## $ cip_code_4digit : num [1:227980] 51.1 ...
## $ cip_title : chr [1:227980] "Health and Medical Administrative Services" ...
## $ cip_family_code : num [1:227980] 51 51 ...
## $ cip_family_title : chr [1:227980] "Health Professions and Related Programs" ...
## $ credential_level : num [1:227980] 1 1 ...
## $ credential_name : chr [1:227980] "Undergraduate Certificate or Diploma" ...
## $ distance_education : chr [1:227980] "Not reported to IPEDS" ...
## $ awards_year1 : num [1:227980] NA NA ...
## $ awards_year2 : num [1:227980] NA NA ...
## $ outcomes_shared_across_campuses : num [1:227980] 0 0 ...
## $ median_earnings_4yr_usd : num [1:227980] 33231 ...
## $ earnings_cohort_size_4yr : num [1:227980] 161 NA ...
## $ national_median_earnings_4yr_usd: num [1:227980] 35447 ...
## $ national_p25_earnings_4yr_usd : num [1:227980] 21575 ...
## $ national_p75_earnings_4yr_usd : num [1:227980] 46852 ...
## $ earnings_vs_national_pct : num [1:227980] -6.3 ...
## $ median_earnings_1yr_usd : num [1:227980] 20765 ...
## $ earnings_cohort_size_1yr : num [1:227980] 112 NA ...
## $ median_earnings_5yr_usd : num [1:227980] 26061 ...
## $ earnings_cohort_size_5yr : num [1:227980] 84 NA ...
## $ not_working_count_5yr : num [1:227980] 10 NA ...
## $ count_above_hs_threshold_5yr : num [1:227980] 33 NA ...
## $ count_working_in_state_5yr : num [1:227980] 79 NA ...
## $ median_debt_usd : num [1:227980] 9087 ...
## $ debt_borrower_count : num [1:227980] NA NA ...
## $ median_monthly_payment_usd : num [1:227980] 96 NA ...
## $ earnings_growth_pct_1yr_to_5yr : num [1:227980] 25.5 NA ...
## $ earnings_trajectory_category : chr [1:227980] "steady" ...
## $ debt_to_earnings_1yr : num [1:227980] 0.438 ...
## $ debt_to_earnings_4yr : num [1:227980] 0.273 ...
## $ payment_to_income_pct_1yr : num [1:227980] 5.55 ...
## $ pct_above_hs_threshold_5yr : num [1:227980] 39.3 ...
## $ pct_working_5yr : num [1:227980] 89.4 ...
## $ pct_working_in_state_5yr : num [1:227980] 94 NA ...
## $ linked_occupations_count : num [1:227980] 19 2 ...
## $ linked_occupations_in_bls : num [1:227980] 19 2 ...
## $ largest_linked_occupation : chr [1:227980] "First-line supervisors of office and administrative support workers" ...
## $ largest_linked_occupation_soc : chr [1:227980] "43-1011" ...
## $ occupation_typical_entry_educati: chr [1:227980] "Bachelor's degree" ...
## $ occupation_employment_2024_thous: num [1:227980] 8161 ...
## $ occupation_growth_pct_2024_34 : num [1:227980] 4.89 ...
## $ occupation_growth_pct_max : num [1:227980] 28.5 ...
## $ occupation_annual_openings_thous: num [1:227980] 730 ...
## $ occupation_median_wage_2024_usd : num [1:227980] 82269 ...
## $ linked_occupations_in_onet : num [1:227980] 19 2 ...
## $ occupations_using_ai_software : num [1:227980] 1 0 ...
## $ ai_software_occupation_share : num [1:227980] 0.053 ...
## $ expert_system_occupation_share : num [1:227980] 0.368 ...
## $ ai_tools_max_per_occupation : num [1:227980] 1 0 ...
## $ hot_technologies_mean_per_occupa: num [1:227980] 32 ...
## $ ai_tool_examples : chr [1:227980] "OpenAI ChatGPT" ...
## $ earnings_4yr_status : chr [1:227980] "reported" ...
## $ earnings_1yr_status : chr [1:227980] "reported" ...
## $ earnings_5yr_status : chr [1:227980] "reported" ...
## $ debt_status : chr [1:227980] "reported" ...
La exploración de la estructura permite identificar variables almacenadas como numéricas, caracteres y otros tipos de datos. Esta información es importante porque el tipo de almacenamiento determina las operaciones y transformaciones que se pueden realizar posteriormente.
A partir de la exploración inicial se identifican variables que no están almacenadas numéricamente. Para este ejercicio se seleccionan:
institution_controldistance_educationEstas variables contienen categorías expresadas mediante texto.
La variable institution_control identifica el tipo de
control de la institución educativa.
Primero se revisan sus categorías:
table(base$institution_control, useNA = "ifany")
##
## Foreign Private, for-profit Private, nonprofit Public
## 4662 13479 72513 137326
La variable presenta categorías como Public, Private, nonprofit, Private, for-profit y Foreign.
Para realizar la codificación se asignan números a las diferentes categorías.
base$institution_control_cod <- match(
base$institution_control,
c(
"Public",
"Private, nonprofit",
"Private, for-profit",
"Foreign"
)
)
La correspondencia utilizada es:
| Código | Categoría |
|---|---|
| 1 | Public |
| 2 | Private, nonprofit |
| 3 | Private, for-profit |
| 4 | Foreign |
La nueva variable se denomina
institution_control_cod.
Podemos comprobar el resultado mediante:
table(
base$institution_control,
base$institution_control_cod,
useNA = "ifany"
)
##
## 1 2 3 4
## Foreign 0 0 0 4662
## Private, for-profit 0 0 13479 0
## Private, nonprofit 0 72513 0 0
## Public 137326 0 0 0
La segunda variable seleccionada es distance_education,
relacionada con la modalidad de educación a distancia.
Primero se observan sus categorías:
table(base$distance_education, useNA = "ifany")
##
## All credentials fully online No credentials fully online
## 23380 158101
## Not reported to IPEDS Some credentials fully online
## 28906 17593
Posteriormente se realiza una codificación numérica.
base$distance_education_cod <- match(
base$distance_education,
c(
"No credentials fully online",
"Not reported to IPEDS",
"All credentials fully online",
"Some credentials fully online"
)
)
La codificación utilizada es:
| Código | Categoría |
|---|---|
| 1 | No credentials fully online |
| 2 | Not reported to IPEDS |
| 3 | All credentials fully online |
| 4 | Some credentials fully online |
La transformación puede comprobarse mediante:
table(
base$distance_education,
base$distance_education_cod,
useNA = "ifany"
)
##
## 1 2 3 4
## All credentials fully online 0 0 23380 0
## No credentials fully online 158101 0 0 0
## Not reported to IPEDS 0 28906 0 0
## Some credentials fully online 0 0 0 17593
En R, las variables categóricas pueden almacenarse como factores. Los factores son útiles para representar variables que contienen un conjunto definido de categorías.
Para este ejercicio se seleccionan las variables
institution_control e institution_region.
Se crea una nueva variable denominada
institution_control_factor.
base$institution_control_factor <- factor(
base$institution_control
)
Se puede comprobar su clase mediante:
class(base$institution_control_factor)
## [1] "factor"
También se pueden consultar sus niveles:
levels(base$institution_control_factor)
## [1] "Foreign" "Private, for-profit" "Private, nonprofit"
## [4] "Public"
La estructura de la variable se puede observar mediante:
str(base$institution_control_factor)
## Factor w/ 4 levels "Foreign","Private, for-profit",..: 2 2 2 2 3 3 3 3 3 3 ...
La variable institution_region contiene información
sobre la región en la que se encuentra la institución.
Se transforma a factor:
base$institution_region_factor <- factor(
base$institution_region
)
Se comprueba su clase:
class(base$institution_region_factor)
## [1] "factor"
Se muestran sus niveles:
levels(base$institution_region_factor)
## [1] "Far West" "Great Lakes" "Mid East"
## [4] "New England" "Outlying Areas" "Plains"
## [7] "Rocky Mountains" "Southeast" "Southwest"
## [10] "U.S. Service Schools"
Finalmente, se puede revisar su estructura:
str(base$institution_region_factor)
## Factor w/ 10 levels "Far West","Great Lakes",..: NA NA NA 9 6 6 6 6 6 6 ...
Una variable categórica que presenta un orden natural en esta base es
earnings_trajectory_category.
Esta variable clasifica la trayectoria de los ingresos mediante categorías como:
Para representar este orden se crea un factor ordenado.
base$earnings_trajectory_ordered <- factor(
base$earnings_trajectory_category,
levels = c(
"declining",
"slow",
"steady",
"steep"
),
ordered = TRUE
)
La variable tiene ahora un orden establecido desde una trayectoria de ingresos decreciente hasta una trayectoria de crecimiento más pronunciado.
Primero se comprueba la clase:
class(base$earnings_trajectory_ordered)
## [1] "ordered" "factor"
Luego se muestran sus niveles:
levels(base$earnings_trajectory_ordered)
## [1] "declining" "slow" "steady" "steep"
También se puede observar su estructura:
str(base$earnings_trajectory_ordered)
## Ord.factor w/ 4 levels "declining"<"slow"<..: 3 NA NA NA NA 4 NA NA NA NA ...
Finalmente, se observa la distribución de las categorías:
table(base$earnings_trajectory_ordered, useNA = "ifany")
##
## declining slow steady steep <NA>
## 2264 7899 11878 17080 188859
Para observar las transformaciones realizadas, se presentan algunas variables originales junto con sus respectivas variables transformadas.
head(
base[
,
c(
"institution_control",
"institution_control_cod",
"distance_education",
"distance_education_cod",
"institution_region",
"institution_region_factor",
"earnings_trajectory_category",
"earnings_trajectory_ordered"
)
],
10
)
## # A tibble: 10 × 8
## institution_control institution_control_cod distance_education
## <chr> <int> <chr>
## 1 Private, for-profit 3 Not reported to IPEDS
## 2 Private, for-profit 3 Not reported to IPEDS
## 3 Private, for-profit 3 Not reported to IPEDS
## 4 Private, for-profit 3 No credentials fully online
## 5 Private, nonprofit 2 All credentials fully online
## 6 Private, nonprofit 2 All credentials fully online
## 7 Private, nonprofit 2 All credentials fully online
## 8 Private, nonprofit 2 No credentials fully online
## 9 Private, nonprofit 2 Not reported to IPEDS
## 10 Private, nonprofit 2 All credentials fully online
## # ℹ 5 more variables: distance_education_cod <int>, institution_region <chr>,
## # institution_region_factor <fct>, earnings_trajectory_category <chr>,
## # earnings_trajectory_ordered <ord>
Durante el ejercicio se realizaron las siguientes actividades:
readxl.head(),
tail(), names(), dim() y
class().str() para analizar la forma en que R
almacenó las variables.institution_control y distance_education.institution_control e
institution_region a variables de tipo factor.earnings_trajectory_category.| Variable original | Transformación | Tipo resultante |
|---|---|---|
institution_control |
Codificación numérica | Numérica |
distance_education |
Codificación numérica | Numérica |
institution_control |
Conversión a factor | Factor |
institution_region |
Conversión a factor | Factor |
earnings_trajectory_category |
Factor ordenado | Ordered factor |
La exploración inicial permitió identificar las principales características de la base de datos y conocer la forma en que R almacena sus variables.
Las funciones head(), tail(),
names(), dim() y class()
permitieron realizar una primera revisión de la información, mientras
que str() permitió analizar con mayor detalle los tipos de
datos presentes.
La codificación numérica permitió transformar dos variables
originalmente almacenadas como texto en variables representadas mediante
códigos numéricos. También se transformaron dos variables categóricas a
factores, permitiendo identificar de manera explícita sus categorías
mediante la función levels().
Finalmente, se utilizó un factor ordenado para
representar la variable earnings_trajectory_category,
estableciendo una secuencia entre las diferentes categorías de
trayectoria de ingresos.