class: center, middle, titular background-size: contain <img src="img/see_azul.jpeg" width="300px"/> # Capítulo 2: Importación y Orden de los Datos en R ## **PROGRAMA INTERNACIONAL DE ESTADÍSTICA APLICADA A LA INVESTIGACIÓN CIENTÍFICA** #### MÓDULO: MANEJO DE SOFTWARE <br> <br> Linda Cabrera Orellana #### Octubre, 2022 --- class: middle, center
# **IMPORTACIÓN Y ORDEN DE LOS DATOS EN R** ## CAPÍTULO 2 --- #
Contenido del Capítulo 2 .pull-left[ * Calidad de los datos * Importar datos * Importar archivos `.csv` * Importar desde Excel * Importar desde SPSS y STATA * Práctica 2.1 * Estructuras de datos * Vectores ] .pull-right[ * Estructuras de datos * Data.frames (Tibbles) * Funciones básicas * Tipos de datos * Numéricos * Cadena de caracteres * Factores * Fechas y Horas * Práctica 2.2 ] --- class: middle, center, inverse
# Calidad de los datos --- <img src="img/lifecycle.png" width="50%" style="display: block; margin: auto;" /> .footnote[ [Understanding the Data Science Lifecycle](https://www.sudeep.co/data-science/2018/02/09/Understanding-the-Data-Science-Lifecycle.html) || [8 Ways to Improve Decision Making](https://www.anblicks.com/blog/8-ways-to-improve-decision-making-and-cut-cost-with-better-data-quality)] --- #
Proceso del *tidyverse* <img src="img/tidyverse.png" width="100%" style="display: block; margin: auto;" /> --- #
Paquetes a utilizar .pull-left[ *
library(tidyverse) *
`library(readr)` *
`library(tibble)` *
`library(stringr)` *
`library(forcats)` ] .pull-right[ *
library(readxl) *
library(haven) *
library(lubridate) *
library(hms) ] --- class: middle, center, inverse
# Importar datos --- #
Importar archivos `.csv` .pull-left[ .center[ <img src="img/readr.png" width="200px"> ] `readr` lee datos rectangulares de archivos delimitados, como valores separados por comas (CSV) y valores separados por tabuladores (TSV). ] -- .pull-right[ Para leer un archivo `.csv` la función a utilizar es `read_csv()` del paquete `readr` que es parte del `tidyverse`. Para cargar nuestro archivo: ```r library(readr) players21 <- read_csv("Data/players_21.csv") ``` También lo podemos hacer con el sistema base de
, aquí no necesitamos cargar ninguna librería. Para esto, nos ubicamos en la barra de herramientas `File -> Import Dataset -> From Text (readr)`. ] .footnote[ [readr.tidyverse.org](https://readr.tidyverse.org/) ] --- #
Importar desde Excel .pull-left[ .center[ <img src="img/readxl.png" width="200px"> ] `readxl` facilita la transferencia de datos de Excel a R y está diseñado para trabajar con datos tabulares. Admite tanto el formato `.xls` heredado como el formato `.xlsx` moderno basado en `xml`. ] -- .pull-right[ Para leer un archivo de Excel la función a utilizar es `read_excel()` del paquete `readxl` que es parte del `tidyverse`. Para cargar nuestro archivo: ```r library(readxl) vuelos <- read_excel("data/VentasVuelos.xlsx", sheet = "data", skip = 1) ``` También lo podemos hacer con el sistema base de
, aquí no necesitamos cargar ninguna librería. Para esto, nos ubicamos en la barra de herramientas `File -> Import Dataset -> From Excel...`. ] .footnote[ [readxl.tidyverse.org](https://readxl.tidyverse.org/) ] --- #
Importar desde SPSS y STATA .pull-left[ .center[ <img src="img/haven.png" width="200px"> ] `haven` permite que R lea y escriba varios formatos de datos utilizados por otros paquetes estadísticos al envolver la fantástica biblioteca ReadStat C escrita por Evan Miller. `haven` es parte del `tidyverse`. ] -- .pull-right[ .panelset[ .panel[.panel-name[SPSS] ## **SPSS** Para leer un archivo de SPSS la función a utilizar es `read_sav()` del paquete `haven` que es parte del `tidyverse`. Para cargar nuestro archivo: ```r library(haven) estres <- read_sav("data/estres.sav") ``` ] .panel[.panel-name[STATA] ## **STATA** Para leer un archivo de STATA la función a utilizar es `read_dta()` del paquete `haven` que es parte del `tidyverse`. Para cargar nuestro archivo: ```r library(haven) pasajeros <- read_dta("data/pasajeros.dta") ``` ] ] ] .footnote[ [haven.tidyverse.org](https://haven.tidyverse.org/) ] <!-- #
Importar desde la web .pull-left[ .center[ <img src="img/rio.png" width="200px"> ] `rio` realiza importación y exportación optimizada de datos. Usa la extensión de archivo de un nombre de archivo para determinar qué tipo de archivo es. ] .pull-right[ En esta ocasión leeremos información disponible en la web del [Banco Central del Ecuador](https://www.bce.fin.ec/). ```r library(rio) # Data del Banco Central del Ecuador # Para guardar la url de descarga en una variable urlData <- "https://contenido.bce.fin.ec/documentos/Estadisticas/SectorReal/CuentasProvinciales/Can2020.xlsm" # Para importar los datos de la url, escogemos la pestaña # sheet: pestaña del documento # skip: número de filas omitidas # col_names: desea nombre de columnas sea la primera fila dataBCE <- import(urlData, sheet = "VAB Cantonal", skip = 6, col_names = TRUE) ``` ] .footnote[ [github.com/leeper/rio](https://github.com/leeper/rio) ] #
Otros archivos * **Excel:** Usando el paquete `openxlsx` con `read.xlsx(xlsxFile , sheet , startRow , colNames , skipEmptyRows, rowNames)` * `foreign` para cargar archivos de SAS, SPSS, Stata: SAS (`read.xport()`), SPSS (`read.spss()`), Stata (`read.dta()`). * GIS sistemas de información geográfica con `rgal` y `raster`. * `GoogleSpreadSheets` con googlesheets. * `data.table` para manejar grandes volúmenes de datos. Existe un curso corto gratuito brindado por la Sociedad Ecuatoriana de Estadística que pueden visitar en el siguiente link: [https://www.youtube.com/Sociedad_Ecuatoriana_Estadistica](https://www.youtube.com/watch?v=s1QnGTk0x8U&list=PL2PpISw8vp_oJlVXpYYowclogCCLtEOfX). --> --- background-color: var(--azul-claro) class: middle, center, inverse
## PRÁCTICA 2.1 --- #
Práctica 2.1 ### 1. Cargar el archivo `profesores.xlsx` y guardarlo en un objeto llamado `profesores`. ### 2. Cargar el archivo `BasePrograma.xlsx` y guardarlo en un objeto llamado `baseprograma`. --- class: middle, center, inverse
# Estructuras de Datos --- #
Vectores .pull-left[ El tipo de dato fundamental en R es el vector. Un vector es una secuencia de elementos de datos todos del mismo tipo. Creamos un vector de dimensión 1: ```r x <- 4 is.vector(x) #¿es vector? ## [1] TRUE ``` Hay varias formas de crear vectores, pero una de las más comunes es el operador de concatenación `c()`. ] -- .pull-right[ A continuación creamos un vector de 4 elementos de tipo numérico: ```r y <- c(11, 13, 15, 20) y #para imprimir vector ## [1] 11 13 15 20 is.vector(y) ## [1] TRUE ``` También podemos crear un vector de tipo caracter de 4 elementos: ```r z <- c("1", "5", "11", "14") z ## [1] "1" "5" "11" "14" is.vector(z) ## [1] TRUE ``` ] --- #
Vectores .pull-left[ También podemos realizar operaciones entre vectores de la misma dimensión: ```r w <- c(2, 5, 6, 8) w ## [1] 2 5 6 8 y + 2*w - 3 ## [1] 12 20 24 33 ``` ] -- .pull-right[ Para conocer la longitud de un vector usamos `length()`. ```r length(y) ## [1] 4 ``` ] --- #
Vectores .pull-left[ Podemos llamar elementos específicos de un vector usando la **indexación**. Por ejemplo: * `x[]` es una forma de llamar a un elemento específico de un vector. * `x[1]` es el primer elemento. * `x[3]` es el tercer elemento. * `x[-3]` es un vector con todo menos el tercer elemento. ] .pull-right[ Vamos a intentar indexar los vectores que tenemos: ```r # reviso los elementos que contiene el vector w w ## [1] 2 5 6 8 # extraigo el segundo elemento del vector w w[2] ## [1] 5 # imprimo el vector w, excepto su tercer elemento w[-3] ## [1] 2 5 8 ``` ] --- #
Data.frames .pull-left[ Un data frame es un conjunto de vectores que deben cumplir las siguientes propiedades: * Las componentes son vectores * Cada vector puede ser de un tipo de dato distinto * Cada columna es una variable * Las columnas tienen el mismo largo Las filas se denominan observaciones y las columnas se las denomina variables. ] .pull-right[ .center[ <img src="img/dataframe.png" width="700px"> Artwork by @allison_horst ] ] --- .pull-left[ ##
Crear un data.frame Con la función `data.frame()`, que se conformará de la unión de 3 vectores creados previamente. ```r nombres <- c("Marcela Cox", "Luis Vargas", "David Mieles") edades <- c(24,32,27) seguro <- factor(c("IESS", "BMI", "IESS")) pacientes <- data.frame(nombres, edades, seguro) pacientes ## nombres edades seguro ## 1 Marcela Cox 24 IESS ## 2 Luis Vargas 32 BMI ## 3 David Mieles 27 IESS ``` Ver objeto creado en el panel `Environment`. ] -- .pull-right[ ##
Cambiar nombre de columnas * Desde la creación del data.frame: ```r pacientes2 <- data.frame(N1=nombres, N2=edades, seguro) pacientes2 ## N1 N2 seguro ## 1 Marcela Cox 24 IESS ## 2 Luis Vargas 32 BMI ## 3 David Mieles 27 IESS ``` * En un data.frame existente con `names()`: ```r names(pacientes2) <- c("Name", "Age", "Insurance") pacientes2 ## Name Age Insurance ## 1 Marcela Cox 24 IESS ## 2 Luis Vargas 32 BMI ## 3 David Mieles 27 IESS ``` ] --- .pull-left[ ##
Navegando por el data.frame Supongamos que queremos extraer la edad de David Mieles. (indexación) ```r pacientes[3,2] ## [1] 27 ``` .center[ <img src="img/dataframe2.png" width="750px"> ] ] .pull-right[ <br> <br> También podemos consultar a R por los valores de una columna entera de nuestro data set con el símbolo `$`. ```r pacientes$nombres ## [1] "Marcela Cox" "Luis Vargas" "David Mieles" ``` Y aplicar una función a esa columna: ```r mean(pacientes$edades) ## [1] 27.66667 ``` ] .footnote[ [tibble.tidyverse.org](https://tibble.tidyverse.org/) ] --- #
Funciones básicas para explorar data.frames .pull-left[ * **`dim():`** indica las dimensiones del data.frame o tibble, número de filas y columnas. * **`str():`** muestra de forma compacta la estructura interna de un objeto R. * **`colnames():`** muestra el nombre de las variables de un data.frame. * **`head():`** muestra las 10 primeras obervaciones del conjunto de datos. * **`tail():`** muestra las 4 últimas observaciones del conjunto de datos. ] .pull-right[ * **`summary():`** produce resúmenes de resultados de varias variables. Los resultados dependen de la clase de datos. * **`sum():`** devuelve la suma de todos los valores presentes en sus argumentos. * **`min():`** devuelve el valor mínimo de un vector numérico. * **`max():`** devuelve el valor máximo de un vector numérico. ] --- #
Funciones básicas para explorar data.frames .panelset[ .panel[.panel-name[Encuestados] ¿Cuántas personas llenaron la encuesta de la situación actual del profesorado de alumnos con necesidades especiales educativas? ```r dim(profesores) ## [1] 175 14 ``` ] .panel[.panel-name[Encuesta] ¿Cuál es la estructura de la encuesta de la situación actual del profesorado de alumnos con necesidades especiales educativas? ```r str(profesores) ## tibble [175 × 14] (S3: tbl_df/tbl/data.frame) ## $ Fecha : POSIXct[1:175], format: "2020-06-24 19:53:09" "2020-06-24 20:31:49" ... ## $ Genero : chr [1:175] "Masculino" "Femenino" "Masculino" "Femenino" ... ## $ Edad : num [1:175] 36 31 35 26 35 38 35 45 38 37 ... ## $ Nivel_docencia : chr [1:175] "Educación infantil, primaria o básica" "Educación superior" "Educación superior" "Educación secundaria y bachillerato" ... ## $ Tiempo_impartiendo_docencia: chr [1:175] "Menos de 3 años" "Menos de 3 años" "Menos de 3 años" "Menos de 3 años" ... ## $ No_Alumnos : num [1:175] 42 37 30 19 25 43 41 24 27 18 ... ## $ No_Alumnos NEE : num [1:175] 2 1 0 2 2 1 2 1 0 1 ... ## $ AD_es_necesaria : num [1:175] 5 5 5 5 5 5 5 5 4 3 ... ## $ AD_en_cualquier_asignatura : num [1:175] 5 4 4 3 4 5 5 4 4 3 ... ## $ Leyes_para_ANEE : num [1:175] 3 5 3 1 2 2 5 2 3 3 ... ## $ Ratio_de_ANEE : num [1:175] 2 5 3 1 2 3 5 3 3 2 ... ## $ Asistente_de_clases : num [1:175] 5 5 3 5 3 2 5 3 4 3 ... ## $ Suficiente_instruccion : num [1:175] 5 3 2 3 2 4 5 4 2 3 ... ## $ Material_utilizado : chr [1:175] "Videos" "Videos" "Videos" "Libro de texto" ... ``` ] .panel[.panel-name[Variables] ¿Cuáles son las variables de la encuesta de la situación actual del profesorado de alumnos con necesidades especiales educativas? ```r colnames(profesores) ## [1] "Fecha" "Genero" ## [3] "Edad" "Nivel_docencia" ## [5] "Tiempo_impartiendo_docencia" "No_Alumnos" ## [7] "No_Alumnos NEE" "AD_es_necesaria" ## [9] "AD_en_cualquier_asignatura" "Leyes_para_ANEE" ## [11] "Ratio_de_ANEE" "Asistente_de_clases" ## [13] "Suficiente_instruccion" "Material_utilizado" ``` ] .panel[.panel-name[Observaciones1] Visualización de las primeras 5 encuestas realizadas al profesorado sobre la situación actual de alumnos con necesidades especiales educativas ```r head(profesores, n=5) ## # A tibble: 5 × 14 ## Fecha Genero Edad Nivel_docencia Tiempo_impartie… No_Alumnos ## <dttm> <chr> <dbl> <chr> <chr> <dbl> ## 1 2020-06-24 19:53:09 Masculino 36 Educación inf… Menos de 3 años 42 ## 2 2020-06-24 20:31:49 Femenino 31 Educación sup… Menos de 3 años 37 ## 3 2020-06-24 21:07:19 Masculino 35 Educación sup… Menos de 3 años 30 ## 4 2020-06-24 21:08:00 Femenino 26 Educación sec… Menos de 3 años 19 ## 5 2020-06-24 21:08:26 Femenino 35 Educación sup… Menos de 3 años 25 ## # … with 8 more variables: `No_Alumnos NEE` <dbl>, AD_es_necesaria <dbl>, ## # AD_en_cualquier_asignatura <dbl>, Leyes_para_ANEE <dbl>, ## # Ratio_de_ANEE <dbl>, Asistente_de_clases <dbl>, ## # Suficiente_instruccion <dbl>, Material_utilizado <chr> ``` ] .panel[.panel-name[Observaciones2] Visualización de las últimas 5 encuestas realizadas al profesorado sobre la situación actual de alumnos con necesidades especiales educativas ```r tail(profesores, n=5) ## # A tibble: 5 × 14 ## Fecha Genero Edad Nivel_docencia Tiempo_impartie… No_Alumnos ## <dttm> <chr> <dbl> <chr> <chr> <dbl> ## 1 2020-07-04 08:16:02 Femenino 32 Educación sup… Más de 6 años 42 ## 2 2020-07-05 16:23:13 Masculino 25 Educación sup… Menos de 3 años 31 ## 3 2020-07-07 16:52:45 Femenino 39 Educación inf… Menos de 3 años 29 ## 4 2020-07-07 16:54:27 Femenino 39 Educación inf… Menos de 3 años 32 ## 5 2020-07-07 17:00:54 Masculino 52 Educación sec… Más de 6 años 38 ## # … with 8 more variables: `No_Alumnos NEE` <dbl>, AD_es_necesaria <dbl>, ## # AD_en_cualquier_asignatura <dbl>, Leyes_para_ANEE <dbl>, ## # Ratio_de_ANEE <dbl>, Asistente_de_clases <dbl>, ## # Suficiente_instruccion <dbl>, Material_utilizado <chr> ``` ] ] --- #
Funciones básicas para explorar data.frames .panelset[ .panel[.panel-name[Total] ¿Cuántos alumnos con necesidades especiales educativas constan en la encuesta? ```r sum(profesores$`No_Alumnos NEE`) ## [1] 149 ``` ] .panel[.panel-name[Min] ¿Cuál es la edad del profesor más joven que llenó la encuesta de la situación actual del profesorado de alumnos con necesidades especiales educativas? ```r min(profesores$Edad) ## [1] 25 ``` ] .panel[.panel-name[Max] ¿Cuál es la edad del profesor mayor que llenó la encuesta de la situación actual del profesorado de alumnos con necesidades especiales educativas? ```r max(profesores$Edad) ## [1] 62 ``` ] .panel[.panel-name[Resumen] Genere un resumen de la variable `No_Alumnos` de la encuesta de la situación actual del profesorado de alumnos con necesidades especiales educativas. ```r summary(profesores$No_Alumnos) ## Min. 1st Qu. Median Mean 3rd Qu. Max. ## 18.00 26.00 33.00 32.48 39.00 45.00 ``` ] ] --- class: middle, center, inverse
# Tipos de Datos --- <div class="figure" style="text-align: center"> <img src="img/tiposdatos.png" alt="Figura 2. Tipos de datos en R" width="100%" /> <p class="caption">Figura 2. Tipos de datos en R</p> </div> --- ## **Numéricos** .pull-left[ Para determinar el tipo de dato de un data set aplicamos la función `class()`. ```r # clase de un vector de 1 elemento class(5) ## [1] "numeric" # clase de la columna edades del dataset pacientes class(pacientes$edades) ## [1] "numeric" ``` Ahora, el vector `\(z\)` de tipo caracter lo convertiremos en tipo numérico. ```r z ## [1] "1" "5" "11" "14" class(z) ## [1] "character" ``` ] -- .pull-right[ ### Con `as.numeric()`. ```r # cambio de clase caracter a numérico con as.numeric() class(as.numeric(z)) ## [1] "numeric" ``` ### Con `parse_number()`. ```r library(readr) # cambio de clase caracter a numérico con parse_number() class(parse_number(z)) ## [1] "numeric" ``` ] <!-- ## **Numéricos** .pull-left[ **`parse_number()`** es muy útil para resolver problemas de decimales, caracteres que acompañas a números y caracteres de agrupación. En R, por default, el decimal es el punto; `grouping_mark` para especificar el signo de agrupación; `decimal_mark` para especificar el decimal a cambiar. ```r parse_number("6'789,56", locale = locale(grouping_mark = "'", decimal_mark = ",")) ## [1] 6789.56 ``` ] .pull-right[ También sirve para extraer números insertos en texto. ```r parse_number("$100") ## [1] 100 parse_number("20%") ## [1] 20 parse_number("It cost $123.45") ## [1] 123.45 parse_number("$123.456.789", locale = locale(grouping_mark = ".")) ## [1] 123456789 ``` ] --> --- ## **Cadena de Caracteres** .pull-left[ `readr` asume que tus datos están codificados en UTF-8. `charToRaw():` realiza una representación subyacente de una cadena de texto. ```r charToRaw("Linda") ## [1] 4c 69 6e 64 61 ``` ¿Qué sucede cuando tus datos producidos no entienden UTF-8? ```r library(readr) x1 <- "El Ni\xf1o was particularly bad this year" ``` ] -- .pull-right[ Para corregir el problema necesitas especificar la codificación en **`parse_character()`**: ```r parse_character(x1, locale = locale(encoding = "Latin1")) ## [1] "El Niño was particularly bad this year" ``` ¿Cómo encontrar la codificación correcta? Con `guess_encoding()` ```r guess_encoding(charToRaw(x1)) ## # A tibble: 2 × 2 ## encoding confidence ## <chr> <dbl> ## 1 ISO-8859-1 0.46 ## 2 ISO-8859-9 0.23 ``` ] .footnote[ [Tablas de codificación de caracteres](http://www.atc.uniovi.es/tablas.php)] --- ## **Cadena de Caracteres** .pull-left[ .center[ <img src="img/stringr.png" width="200px"> ] `stringr` proporciona un conjunto cohesivo de funciones diseñadas para trabajar de forma más fácil con cadenas de caracteres. ```r library(stringr) ``` ] -- .pull-right[ ```r frase <- "Esta es una cadena de caracteres" class(frase) ## [1] "character" ``` `str_length()` indica el número de caracteres de una cadena. ```r str_length(frase) ## [1] 32 ``` `str_c()` combina dos o más cadenas: ```r str_c(frase, " y esto también") ## [1] "Esta es una cadena de caracteres y esto también" ``` ] .footnote[ [stringr.tidyverse.org](https://stringr.tidyverse.org/) || [tidyverse/reprex](https://github.com/tidyverse/reprex)] --- ## **Factores** .pull-left[ .center[ <img src="img/forcats.png" width="200px"> ] `forcats` proporciona un conjunto de herramientas que resuelven problemas comunes con factores. ```r library(forcats) ``` ] -- .pull-right[ Imaginemos que tenemos la siguiente variable que registra meses: ```r fc1 <- c("Dic", "Abr", "Ene", "Mar") class(fc1) ## [1] "character" ``` Si trabajamos esta variable en tipo caracter, tendremos 2 problemas: 1. Errores de tipeo, 2. No se ordena de una forma útil. Estos problemas se solucionan trabajando con factores. ] .footnote[ [forcats.tidyverse.org](https://forcats.tidyverse.org/) || [Wrangling categorical data in R](https://peerj.com/preprints/3163/) || [stringsAsFactors = <sigh>](https://notstatschat.tumblr.com/post/124987394001/stringsasfactors-sigh) ] --- ## **Factores** Para crear un factor con **`factor()`** debes: 1. Definir una lista de niveles válidos. ```r niveles_meses <- c("Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic") ``` 2. Ahorar puedes crear un factor. ```r y1 <- factor(fc1, levels = niveles_meses) class(y1) ## [1] "factor" # para acceder a los niveles del factor levels(y1) ## [1] "Ene" "Feb" "Mar" "Abr" "May" "Jun" "Jul" "Ago" "Sep" "Oct" "Nov" "Dic" ``` --- ## **Fechas y Horas** .pull-left[ **`parse_datetime()`** asume una fecha-hora ISO8601, estándar internacional en el que los componentes de una fecha están organizados de mayor a menor: año, mes, día, hora, minuto, segundo. ```r # Dato de fecha-hora fecha1 <- "2010-10-01T2010" parse_datetime(fecha1) ## [1] "2010-10-01 20:10:00 UTC" # Si se omite la hora, será determinada como medianoche. fecha2 <- "20101010" parse_datetime(fecha2) ## [1] "2010-10-10 UTC" ``` ] -- .pull-right[ **`parse_date()`** asume aaaa-mm-dd o aaaa/mm/dd. ```r fecha3 <- "2010-10-01" parse_date(fecha3) ## [1] "2010-10-01" ``` **`parse_time()`** espera la hh:mm:ss, los segundos y el especificador am/pm son opcionales. ```r library(hms) parse_time("01:10 am") ## 01:10:00 parse_time("20:10:01") ## 20:10:01 ``` ] .footnote[ [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) || [hms.tidyverse.org](https://hms.tidyverse.org/)] --- ## **Fechas y Horas** .pull-left[ .center[ <img src="img/lubridate.png" width="200px"> ] `lubridate` hace que sea más fácil hacer las cosas que hace R con fecha y hora y hace posible hacer las cosas que R base no hace. ```r library(lubridate) ``` ] -- .pull-right[ Hay tres tipos de datos de fechas/horas que se refieren a un instante en el tiempo: * Una fecha o `date`. * Una hora o `time` dentro de un día. * Una fecha-hora o date-time `dttm` (llamado también `POSIXct`). Para obtener la fecha o fecha-hora actual utiliza `today()` o `now()`: ```r today() ## [1] "2022-10-12" now() ## [1] "2022-10-12 16:32:47 -05" ``` ] .footnote[ [lubridate.tidyverse.org](https://lubridate.tidyverse.org/) || [hms.tidyverse.org](https://hms.tidyverse.org/) ] --- ## **Fechas y Horas** .pull-left[ Hay tres modos en los que puedes crear una fecha/hora: * Desde una cadena de caracteres (o string, en inglés). * Desde componentes de fecha-hora individuales. * Desde un objeto fecha-hora existente. ### Desde cadenas de caracteres ```r ymd("2017-01-31") ## [1] "2017-01-31" ymd("20170131") ## [1] "2017-01-31" ``` ] -- .pull-right[ ```r mdy("01-31-2017") ## [1] "2017-01-31" mdy("01312017") ## [1] "2017-01-31" dmy("31-01-2017") ## [1] "2017-01-31" dmy("31012017") ## [1] "2017-01-31" mdy_hm("01/31/2017 08:01") ## [1] "2017-01-31 08:01:00 UTC" ymd_hms("2017-01-31 20:11:59") ## [1] "2017-01-31 20:11:59 UTC" ``` ] --- ## **Fechas y Horas** .pull-left[ ### Desde componentes individuales Crearé un data.frame donde las fechas y las horas están repartidos en diferentes columnas. ```r ejemplo <- data.frame(anio= c(1994, 1992, 1987), dia= c(21, 02, 15), mes= c(02, 04, 05), hora= c(20, 14, 09), minuto= c(45, 30, 15)) ejemplo ## anio dia mes hora minuto ## 1 1994 21 2 20 45 ## 2 1992 2 4 14 30 ## 3 1987 15 5 9 15 ``` ] .pull-right[ `make_date()` para crear fecha. ```r # forma fecha que contiene dia, mes y anio make_date(ejemplo$anio, ejemplo$mes, ejemplo$dia) ## [1] "1994-02-21" "1992-04-02" "1987-05-15" ``` `make_datetime()` para crear fecha-hora. ```r # forma fecha-hora make_datetime(ejemplo$anio, ejemplo$mes, ejemplo$dia, ejemplo$hora, ejemplo$minuto) ## [1] "1994-02-21 20:45:00 UTC" "1992-04-02 14:30:00 UTC" ## [3] "1987-05-15 09:15:00 UTC" ``` ] --- ## **Fechas y Horas** ### Desde otros tipos ```r as_datetime(today()) ## [1] "2022-10-12 UTC" as_date(now()) ## [1] "2022-10-12" ``` --- background-color: var(--azul-claro) class: middle, center, inverse
## PRÁCTICA 2.2 ## PRÁCTICA 2.3 --- #
Práctica 2.2 ### 1. Verifique la estructura del data set `profesores` y define el tipo de cada variable. ### 2. Prepare el data set para el análisis verificando que el tipo de dato de cada variable sea el adecuado, corríjalos. ### 3. Guarde el data set en un archivo excel en su computadora llamado `r_profesores`. ### 4. Extraer la información del 6to encuestado. ### 5. Extraer la siguiente información del 5to encuestado: edad, género y si condera que la atención a la diversidad es necesaria. --- #
Práctica 2.3 ### 1. Verifique la estructura del data set `baseprograma` y define el tipo de cada variable. ### 2. Prepare el data set para el análisis verificando que el tipo de dato de cada variable sea el adecuado, corríjalos. ### 3. Guarde el data set coregido en un archivo excel en su computadora `r_programa`. ### 4. Extraer la información del 5to encuestado. ### 5. Extraer la estatura y edad del 9no encuestado. --- class: middle, center, inverse <br> <br> # **¡FIN!** ## Importación y Orden de los Datos en R ### Síguenos .pull-left[ .center[ ### [@socecuest
](https://www.facebook.com/socecuest) ### [@see_estadistica
](https://www.instagram.com/see_estadistica/) ]] .pull-right[ .center[ ### [@see_estadistica
](https://twitter.com/see_estadistica) ### [@sosecuest
](https://t.me/sosecuest) ]]