Importación de datos en R

Author

Edimer David Jaramillo

Importación de datos a R

Bibliotecas

Code
library(tidyverse)
library(janitor)
library(readxl)

Tubería en R

La tubería en R se obtiene con CTRL + Shift + M: |>

Importando excel

Code
encuesta_excel <- read_excel("datos/encuesta_excel.xlsx")

encuesta_excel |> head()
  • Es posible consultar el nombre de las hojas del archivo de excel:
Code
excel_sheets("datos/archivo-ejemplo-hojas-excel.xlsx")
[1] "Ejemplo1"  "ejemplo2 "

Importando csv (separado por comas)

Code
encuesta_csv_comas <- 
  read_csv("datos/encuesta_comas.csv")

encuesta_csv_comas |> head()

Importando csv (separado por punto y coma)

Code
encuesta_csv_punto_coma <- 
  read_csv2("datos/encuesta_punto_coma.csv")

encuesta_csv_punto_coma |> head()

Importando csv (separado por tabulador)

Code
encuesta_csv_tabulador <- 
  read_tsv("datos/encuesta_tabular.csv")

encuesta_csv_tabulador |> head()

Importando csv (separado por otro delimitador)

Code
encuesta_csv_otro_delim <- 
  read_delim("datos/encuesta_otro_delimitador.csv", delim = "|")

encuesta_csv_otro_delim |> head()

Tipos de variables

Tipos de datos en R

  • Con estas funciones podemos conocer el tipo de dato de cada columna del dataframe que fue importado:
    • str()
    • glimpse()
Code
encuesta_excel |> 
  str()
tibble [35 × 17] (S3: tbl_df/tbl/data.frame)
 $ fecha            : chr [1:35] "2024/02/08 9:16:49 p. m. GMT-5" "2024/02/08 9:33:45 p. m. GMT-5" "2024/02/09 11:32:54 a. m. GMT-5" "2024/02/09 12:46:16 p. m. GMT-5" ...
 $ promedio_acad    : num [1:35] 4.2 3.5 3.87 3.4 3.78 3.75 4.19 3.5 3.84 3.34 ...
 $ numero_nofav     : num [1:35] 3 6 9 2 6 5 7 8 7 5 ...
 $ horas_dormir     : num [1:35] 7 6 7 5 10 6 8 8 7 6 ...
 $ redes_sociales   : num [1:35] 3 5 3 2 3 3 3 2 6 5 ...
 $ relevencia_matem : num [1:35] 9 10 8 7 10 10 10 10 8 8 ...
 $ fecha_nac        : POSIXct[1:35], format: "2004-01-22" "2003-08-24" ...
 $ asignaturas      : num [1:35] 8 7 7 8 7 7 6 8 6 8 ...
 $ num_semestre     : num [1:35] 5 5 5 5 4 5 5 5 5 5 ...
 $ trabaja          : chr [1:35] "No" "No" "No" "No" ...
 $ asignatura_prefer: chr [1:35] "Estadística" "Topografía" "Humanística" "Humanidades" ...
 $ asignatura_dific : chr [1:35] "Álgebra lineal" "Cálculo diferencial" "Cálculos" "Cálculo diferencial" ...
 $ editar_carrera   : chr [1:35] "En mi carrera profesional agregaría unas asignaturas más que tengan que ver con programación y sus fundamentos" "Yo hasta el momento lo único que agregaría es que el enfoque y la importancia en cuanto a lo que pecuario sea mayor." "Creo que el currículo de la carrera esta muy completo." "los elementos que le agregaria seria que fuera mas practica, mas de  ejercer" ...
 $ aplicacion_ia    : chr [1:35] "La IA es muy útil en mi carrera profesional, pero siento que estamos siendo muy dependientes a ella y eso puede"| __truncated__ "Creo que es muy útil el uso de la inteligencia artificial en mi ejercicio profesional ya que la inteligencia ar"| __truncated__ "Pienso que ha sido una herramienta que facilita la realización de muchos trabajos, que debe ser usada de  maner"| __truncated__ "pues personalmente yo no estoy de acuerdo con la inteligenciaartificial ya que yo considero que asi como ha log"| __truncated__ ...
 $ tiene_pc         : chr [1:35] "Sí" "No" "Sí" "Sí" ...
 $ beca             : chr [1:35] "Sí" "No" "Sí" "No" ...
 $ edad             : num [1:35] 20.1 20.5 24.7 28.4 23.6 ...

Hacemos lo mismo con glimpse():

Code
encuesta_excel |> 
  glimpse()
Rows: 35
Columns: 17
$ fecha             <chr> "2024/02/08 9:16:49 p. m. GMT-5", "2024/02/08 9:33:4…
$ promedio_acad     <dbl> 4.20, 3.50, 3.87, 3.40, 3.78, 3.75, 4.19, 3.50, 3.84…
$ numero_nofav      <dbl> 3, 6, 9, 2, 6, 5, 7, 8, 7, 5, 7, 6, 3, 3, 1, 8, 9, 8…
$ horas_dormir      <dbl> 7, 6, 7, 5, 10, 6, 8, 8, 7, 6, 5, 6, 6, 1, 6, 12, 7,…
$ redes_sociales    <dbl> 3, 5, 3, 2, 3, 3, 3, 2, 6, 5, 1, 4, 5, 4, 3, 4, 1, 2…
$ relevencia_matem  <dbl> 9, 10, 8, 7, 10, 10, 10, 10, 8, 8, 6, 6, 7, 8, 10, 9…
$ fecha_nac         <dttm> 2004-01-22, 2003-08-24, 1999-06-23, 1995-10-14, 200…
$ asignaturas       <dbl> 8, 7, 7, 8, 7, 7, 6, 8, 6, 8, 8, 8, 7, 9, 8, 7, 9, 8…
$ num_semestre      <dbl> 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5…
$ trabaja           <chr> "No", "No", "No", "No", "Sí", "No", "No", "No", "No"…
$ asignatura_prefer <chr> "Estadística", "Topografía", "Humanística", "Humanid…
$ asignatura_dific  <chr> "Álgebra lineal", "Cálculo diferencial", "Cálculos",…
$ editar_carrera    <chr> "En mi carrera profesional agregaría unas asignatura…
$ aplicacion_ia     <chr> "La IA es muy útil en mi carrera profesional, pero s…
$ tiene_pc          <chr> "Sí", "No", "Sí", "Sí", "No", "Sí", "Sí", "Sí", "Sí"…
$ beca              <chr> "Sí", "No", "Sí", "No", "No", "Sí", "Sí", "Sí", "No"…
$ edad              <dbl> 20.08482, 20.49795, 24.66484, 28.35294, 23.62791, 20…

Acceder a columnas de un dataframe

Podemos acceder a las columnas de una base de datos a través del signo pesos: –> datos$nombre_variable

Code
encuesta_excel$edad
 [1] 20.0848153 20.4979480 24.6648427 28.3529412 23.6279070 20.5253078
 [7] 23.2175103 22.1751026 20.1641587 23.7865937 21.2038304 20.0410397
[13] 19.8248974 26.6210670 25.5321477 19.4883721 27.1162791 26.3036936
[19] 20.3036936 19.2558140 20.6155951 21.5512996 21.9753762 28.1751026
[25] 19.5485636 22.6347469 24.4377565 24.0820793 21.3871409 25.6607387
[31] 26.2489740 -0.4733242 24.1012312 20.0930233 23.7291382

¿Cómo sabemos de qué tipo es la variable anterior?

Code
encuesta_excel$edad |> 
  class()
[1] "numeric"

Depuración de encuesta

Datos iniciales

Code
nombres_var <-
  c("fecha",
    "promedio_acad",
    "numero_nofav",
    "horas_dormir",
    "redes_sociales",
    "relevencia_matem",
    "fecha_nac",
    "asignaturas",
    "num_semestre",
    "trabaja",
    "asignatura_prefer",
    "asignatura_dific",
    "editar_carrera",
    "aplicacion_ia",
    "tiene_pc",
    "beca")

df_encuesta_inicial <-
  read_csv("datos/Encuesta.csv") |> 
  clean_names()

df_encuesta_inicial |> head()

Datos depurados

Code
df_encuesta_final <-
  df_encuesta_inicial |>
  filter(x1_cual_es_su_promedio_academico_actual != "50") |>
  set_names(nombres_var) |>
  mutate(
    promedio_acad = str_replace_all(promedio_acad, ",", "."),
    promedio_acad = as.numeric(promedio_acad),
    numero_nofav = str_replace_all(numero_nofav, "tres", "3"),
    numero_nofav = as.numeric(numero_nofav),
    horas_dormir = parse_number(horas_dormir)
  ) |>
  mutate(
    redes_sociales = str_replace_all(
      redes_sociales,
      "Tiktok, Youtube, Pinterest, instagram, Spotify, Whatsapp",
      "6"
    ),
    redes_sociales = str_replace_all(redes_sociales,
                                     "WhatsApp",
                                     "1"),
    redes_sociales = str_replace_all(redes_sociales,
                                     "instagram, x",
                                     "2"),
    redes_sociales = str_replace_all(
      redes_sociales,
      "Facebook, Twitter, WhatsApp, Telegram, Snapchat, Tik Tok, Instagram",
      "7"
    ),
    redes_sociales = str_replace_all(redes_sociales,
                                     "Instagram, Facebook",
                                     "2"),
    redes_sociales = str_replace_all(redes_sociales,
                                     "Instagram,facebook",
                                     "2"),
    redes_sociales = str_replace_all(
      redes_sociales,
      "Facebook, Twitter, 1, Telegram, Snapchat, Tik Tok, Instagram",
      "6"
    ),
    redes_sociales = as.numeric(redes_sociales),
    asignaturas = str_replace(asignaturas,
                              "Siete materias",
                              "7"),
    asignaturas = as.numeric(asignaturas),
    num_semestre = str_replace(num_semestre,
                               "Quinto semestre",
                               "5"),
    num_semestre = str_replace(num_semestre,
                               "Cuarto",
                               "4"),
    num_semestre = as.numeric(num_semestre),
    asignatura_prefer = str_to_sentence(asignatura_prefer),
    asignatura_prefer =
      str_replace_all(asignatura_prefer,
                      "Botánica y fisiología vegetal",
                      "Botánica"),
    asignatura_prefer =
      str_replace_all(asignatura_prefer,
                      "Botanica y fisiologia vegetal",
                      "Botánica"),
    asignatura_prefer =
      str_replace_all(asignatura_prefer,
                      "Botanica",
                      "Botánica"),
    asignatura_prefer =
      str_replace_all(asignatura_prefer,
                      "Topografia",
                      "Topografía"),
    asignatura_dific = str_to_sentence(asignatura_dific),
    asignatura_dific =
      str_replace_all(asignatura_dific,
                      "Calculo",
                      "Cálculo diferencial"),
    asignatura_dific =
      str_replace_all(asignatura_dific,
                      "Calculo 1",
                      "Cálculo diferencial"),
    asignatura_dific =
      str_replace_all(asignatura_dific,
                      "Calculo diferencial",
                      "Cálculo diferencial"),
    asignatura_dific =
      str_replace_all(asignatura_dific,
                      "Calculo integral",
                      "Cálculo integral"),
    asignatura_dific =
      str_replace_all(asignatura_dific,
                      "Algebra lineal",
                      "Álgebra lineal"),
    asignatura_dific =
      str_replace_all(
        asignatura_dific,
        "Ecuaciones diferenciales y inglés.",
        "Ecuaciones diferenciales"
      ),
    asignatura_dific =
      str_replace_all(asignatura_dific,
                      "Cálculo diferencial integral",
                      "Cálculos"),
    asignatura_dific =
      str_replace_all(asignatura_dific,
                      "Los calculos",
                      "Cálculos"),
    asignatura_dific =
      str_replace_all(
        asignatura_dific,
        "Cálculo diferencial 1",
        "Cálculo diferencial"
      ),
    asignatura_dific =
      str_replace_all(
        asignatura_dific,
        "Cálculo diferencial diferencial",
        "Cálculo diferencial"
      ),
    asignatura_dific =
      str_replace_all(
        asignatura_dific,
        "Cálculo diferencial vectorial",
        "Cálculo diferencial"
      ),
    fecha_nac = if_else(
      fecha_nac == "0095-12-18",
      true = ymd("1995-12-18"),
      false = fecha_nac
    ),
    edad = as.numeric((Sys.Date() - fecha_nac) / 365.5)
  ) 

df_encuesta_final |> head()