$sexo <- car::recode(proc_elsoc$sexo, recodes = c("'Hombre' = 'Masculino'; 'Mujer' = 'Femenino'"))
@@ -744,7 +741,10 @@ proc_elsoc4.4 Tratamient
5 Transformar variables
Un último paso en el procesamiento de datos es la creación o derivación de nuevas variables a partir de los datos que ya tenemos. Esto es relevante no solo para procesar datos, sino porque permite generar variables que se alineen mucho mejor con nuestros objetivos de análisis.
-La función mutate()
de dplyr
no solo nos permite recodificar variables, sino que también crear otras nuevas manteniendo las originales. Para este ejemplo usaremos dos funciones adicionales de dplyr
que, al combinarlas con mutate()
, podremos transformar variables de manera muy sencilla.
+A diferencia de R base, con la función mutate()
de dplyr
podemos recodificar todas nuestras variables en un solo código si así lo queremos. Además, nos ahorramos especificar en todo momento la base de datos, ya que esa es la lógica de programación con dplyr()
.
+La estructura de mutate()
es generalmente esta:
+dplyr::mutate(datos, nueva_variable = funcion())
+Además, la función mutate()
de dplyr
no solo nos permite recodificar variables, sino que también crear otras nuevas manteniendo las originales. Para este ejemplo usaremos dos funciones adicionales de dplyr
que, al combinarlas con mutate()
, podremos transformar variables de manera muy sencilla.
En este ejemplo, transformaremos las variables edad
e ingresos
, y crearemos una nueva variable llamada año
de la encuesta y otra llamada ingreso_minimo
.
¡Veámos cómo se hace!
Generemos las nueva variable año:
diff --git a/docs/search.json b/docs/search.json
index 06804fe..67d23ad 100644
--- a/docs/search.json
+++ b/docs/search.json
@@ -340,14 +340,14 @@
"href": "assignment/03-practico.html#limpiar-datos",
"title": "Práctica 3. Procesamiento, limpieza y manipulación de datos en R",
"section": "4 Limpiar datos",
- "text": "4 Limpiar datos\nPara todos los subprocesos que involucra la “limpieza” de datos, tenemos al menos dos maneras. Por un lado, podemos usar las funciones de R base, es decir, que no requieren paquetes extras. Por el otro, podemos usar las funciones del paquete dplyr(), que es una gramática o dialecto de manipulación de datos que proporciona un conjunto de coherente funciones o “verbos” básicos para programar.\n\n\n\n\n\n\n\n\n\nPero, ¿por qué gramática y verbos? Porque a diferencia de otras formas de programar, dplyr() está orientado a escribir código como la escritura normal, es decir, de izquierda a derecha. Generalmente, la estructura de dplyr() es:\ndplyr::funcion(datos, variable1, variable2, variable_n)\nEn este práctico solo nos centraremos en manipular datos con dplyr(). Para conocer cómo hacer lo mismo pero con R base visita este enlace.\n\n\n4.1 Seleccionar\nUna vez tenemos claras cúales son las variables que nos interesan, las seleccionamos y almacenamos en una nueva base de datos. Esto debido que evitará confusiones y hará más eficiente nuestros analísis en términos de memoria.\nEn R base, el primer argumento dentro del bracket [] refiere a las filas y el segundo a las columnas. De manera similar, la función select() de dplyr facilita el trabajo a la hora de seleccionar variables. La estructura general del comando siempre es select(datos, variable1, variable2, variable3).\nHay distintas formas de usar select(), ¡veámoslas!\nPor indexación o ubicación en la base de datos:\n\ndplyr::select(elsoc_2022, 1, 2) # la primera y la segunda columna\n\ndplyr::select(elsoc_2022, 1:4) # la primera hasta la cuarta columna\n\ndplyr::select(elsoc_2022, c(1, 4, 5)) # la primera, la cuarta y la quinta columna\n\nTambién podemos usar el nombre de la variable/columna. Si conocemos el nombre de la variable simplemente lo podemos poner y se seleccionará. Con select() no es necesario poner los nombres con comillas \" \":\n\ndplyr::select(elsoc_2022, m0_sexo, m0_edad, m13)\n\n# A tibble: 1,000 × 3\n m0_sexo m0_edad m13\n <chr> <dbl> <dbl>\n 1 Hombre 38 4000000\n 2 Mujer 45 2700000\n 3 Hombre 42 600000\n 4 Hombre 29 1250000\n 5 Mujer 53 500000\n 6 Mujer 52 NA\n 7 Mujer 50 NA\n 8 Mujer 57 0\n 9 Mujer 47 600000\n10 Hombre 79 NA\n# ℹ 990 more rows\n\n\nOtra cosa que podemos hacer es renombrar las variables al momento de seleccionarlas, para que tengan un sentido más sustantivo para nosotros.\n\ndplyr::select(elsoc_2022, sexo = m0_sexo, edad = m0_edad, ingreso = m13)\n\n# A tibble: 1,000 × 3\n sexo edad ingreso\n <chr> <dbl> <dbl>\n 1 Hombre 38 4000000\n 2 Mujer 45 2700000\n 3 Hombre 42 600000\n 4 Hombre 29 1250000\n 5 Mujer 53 500000\n 6 Mujer 52 NA\n 7 Mujer 50 NA\n 8 Mujer 57 0\n 9 Mujer 47 600000\n10 Hombre 79 NA\n# ℹ 990 more rows\n\n\nPor último, podemos usar select() para reordenar nuestras variables, lo cual es importante por si por ejemplo utilizamos variables de identificación.\n\ndplyr::select(elsoc_2022, m0_edad, m0_sexo, c25, m13)\n\n# A tibble: 1,000 × 4\n m0_edad m0_sexo c25 m13\n <dbl> <chr> <dbl> <dbl>\n 1 38 Hombre 1 4000000\n 2 45 Mujer 1 2700000\n 3 42 Hombre 3 600000\n 4 29 Hombre 1 1250000\n 5 53 Mujer 2 500000\n 6 52 Mujer 3 NA\n 7 50 Mujer 2 NA\n 8 57 Mujer 1 0\n 9 47 Mujer 1 600000\n10 79 Hombre 2 NA\n# ℹ 990 more rows\n\n\nAhora, ¡apliquemos conocimientos! seleccionando y renombrando las variables de interés en un nueva base llamada proc_elsoc.\nEn este ejemplo utilizaremos las siguientes variables:\n\nm0_sexo: sexo del entrevistado\nm0_edad: edad del entrevistado\nm13: ingreso mensual entrevistado\nc25: preferencia entre autoritarismo y democracia\nf05_01: justificación violencia hacia delincuentes\n\n\nproc_elsoc <- dplyr::select(elsoc_2022, \n edad = m0_edad,\n sexo = m0_sexo,\n ingreso = m13,\n autor_democ = c25,\n jv_delincuentes = f05_01)\n\nproc_elsoc\n\n# A tibble: 1,000 × 5\n edad sexo ingreso autor_democ jv_delincuentes\n <dbl> <chr> <dbl> <dbl> <dbl>\n 1 38 Hombre 4000000 1 NA\n 2 45 Mujer 2700000 1 3\n 3 42 Hombre 600000 3 NA\n 4 29 Hombre 1250000 1 1\n 5 53 Mujer 500000 2 3\n 6 52 Mujer NA 3 2\n 7 50 Mujer NA 2 5\n 8 57 Mujer 0 1 4\n 9 47 Mujer 600000 1 3\n10 79 Hombre NA 2 1\n# ℹ 990 more rows\n\n\nEsta nueva base de datos sigue manteniendo los 1.000 casos/filas, pero ahora solo tiene 5 variables/columnas. ¿Qué pasa si solo quiero trabajar con un subconjunto de estos datos, por ejemplo, las mujeres mayores a 25 años? La respuesta es filtrar.\n\n\n4.2 Filtrar\nTal y como regularmente no trabajamos con todas las variables de una base de datos, no siempre desearemos trabajar con todas las observaciones que tenemos en los datos. Habrá ocasiones (varias) en las que querremos trabajar con casos que cumplan ciertas condiciones; que sean de determinada edad, residencia, tiempo o que simplemente hayan respondido de determinada forma una pregunta.\nCon dplyr podemos filtrar nuestros datos con el comando filter(), en el cual debemos especificar los datos y las condiciones que queremos aplicarle a determinadas variables.\n\ndplyr::filter(proc_elsoc, autor_democ == 1)\n\n# A tibble: 552 × 5\n edad sexo ingreso autor_democ jv_delincuentes\n <dbl> <chr> <dbl> <dbl> <dbl>\n 1 38 Hombre 4000000 1 NA\n 2 45 Mujer 2700000 1 3\n 3 29 Hombre 1250000 1 1\n 4 57 Mujer 0 1 4\n 5 47 Mujer 600000 1 3\n 6 39 Hombre 1350000 1 4\n 7 61 Mujer NA 1 3\n 8 25 Hombre NA 1 2\n 9 42 Hombre 1100000 1 4\n10 51 Hombre 800000 1 1\n# ℹ 542 more rows\n\n\nPara indicarle a R que nos filtre aquellos casos que cumplen con la condición de ser iguales a 1 (autor_democ == 1), usamos el operador ==. ¿Y esto de dónde salió? recuerda que los operadores en R los vimos en la segunda sesión\nTambién podemos agregar muchas condiciones para filtrar nuestros datos. Solamente debemos agregarlo, usando los operadores relacionales de R.\n\ndplyr::filter(proc_elsoc, autor_democ == 1 & edad >= 25)\n\n# A tibble: 544 × 5\n edad sexo ingreso autor_democ jv_delincuentes\n <dbl> <chr> <dbl> <dbl> <dbl>\n 1 38 Hombre 4000000 1 NA\n 2 45 Mujer 2700000 1 3\n 3 29 Hombre 1250000 1 1\n 4 57 Mujer 0 1 4\n 5 47 Mujer 600000 1 3\n 6 39 Hombre 1350000 1 4\n 7 61 Mujer NA 1 3\n 8 25 Hombre NA 1 2\n 9 42 Hombre 1100000 1 4\n10 51 Hombre 800000 1 1\n# ℹ 534 more rows\n\n\nPero, ¿y si tengo variables tipo character o factor? Tanto en R base como con dplyr podemos especificar condiciones y filtrar este tipo de datos usando las comillas \" \".\n\ndplyr::filter(proc_elsoc, sexo == \"Mujer\")\n\n# A tibble: 656 × 5\n edad sexo ingreso autor_democ jv_delincuentes\n <dbl> <chr> <dbl> <dbl> <dbl>\n 1 45 Mujer 2700000 1 3\n 2 53 Mujer 500000 2 3\n 3 52 Mujer NA 3 2\n 4 50 Mujer NA 2 5\n 5 57 Mujer 0 1 4\n 6 47 Mujer 600000 1 3\n 7 61 Mujer NA 1 3\n 8 78 Mujer NA 4 1\n 9 65 Mujer NA 1 1\n10 69 Mujer NA 2 1\n# ℹ 646 more rows\n\n\n¡Apliquémos conocimientos! Filtremos nuestros datos quedándonos solo con aquellos casos o personas que tengan o sean mayores a 25 años de edad.\n\nproc_elsoc <- dplyr::filter(proc_elsoc, edad >= 25)\n\nproc_elsoc\n\n# A tibble: 980 × 5\n edad sexo ingreso autor_democ jv_delincuentes\n <dbl> <chr> <dbl> <dbl> <dbl>\n 1 38 Hombre 4000000 1 NA\n 2 45 Mujer 2700000 1 3\n 3 42 Hombre 600000 3 NA\n 4 29 Hombre 1250000 1 1\n 5 53 Mujer 500000 2 3\n 6 52 Mujer NA 3 2\n 7 50 Mujer NA 2 5\n 8 57 Mujer 0 1 4\n 9 47 Mujer 600000 1 3\n10 79 Hombre NA 2 1\n# ℹ 970 more rows\n\n\n\n\n4.3 Recodificar\nUna parte fundamental del procesamiento e integración de datos es la recodificación de variables. Esto implica que, a determinadas variables, le aplicaremos ciertos cambios de acuerdo a ciertas reglas y criterios establecidos con anterioridad, siempre cuidando la coherencia con nuestro objetivo de investigación.\nHay múltiples formas de recodificar en R, pero en este ejemplo trabajaremos con el comando recode() del paquete car.\nEsta vez, recodificaremos las siguientes variables: sexo, ingreso, autor_democ y jv_delincuentes. Para esto, nos apoyaremos en el libro de códigos.\n\n\n\n\n\n\nTip\n\n\n\nEl comando recode() generalmente sigue esta estructura:\ncar::recode(datos$variable, recodes = c('valor_orig1=nuevo_valor1;valor_org2=nuevo_valor2'))\n\n\nA diferencia de R base, con la función mutate() de dplyr podemos recodificar todas nuestras variables en un solo código si así lo queremos. Además, nos ahorramos especificar en todo momento la base de datos, ya que esa es la lógica de programación con dplyr().\nLa estructura de mutate() es generalmente esta:\ndplyr::mutate(datos, nueva_variable = funcion())\nRecodifiquemos las variables sexo e ingresos:\n\nproc_elsoc$sexo <- car::recode(proc_elsoc$sexo, recodes = c(\"'Hombre' = 'Masculino'; 'Mujer' = 'Femenino'\"))\n\nproc_elsoc$ingreso <- car::recode(proc_elsoc$ingreso, recodes = c(\"-888 = NA; -999 = NA\"))\n\nproc_elsoc\n\n# A tibble: 980 × 5\n edad sexo ingreso autor_democ jv_delincuentes\n <dbl> <chr> <dbl> <dbl> <dbl>\n 1 38 Masculino 4000000 1 NA\n 2 45 Femenino 2700000 1 3\n 3 42 Masculino 600000 3 NA\n 4 29 Masculino 1250000 1 1\n 5 53 Femenino 500000 2 3\n 6 52 Femenino NA 3 2\n 7 50 Femenino NA 2 5\n 8 57 Femenino 0 1 4\n 9 47 Femenino 600000 1 3\n10 79 Masculino NA 2 1\n# ℹ 970 more rows\n\n\nAhora recodifiquemos las demás variables. Además de recodificar valores propiamente tal, con recode() podemos indicarle, en la misma función, que convierta la variable a factor y/o que le asigne niveles (ej. para variables ordinales).\n\nproc_elsoc$autor_democ <- car::recode(proc_elsoc$autor_democ,\n recodes = c(\"1 = 'La democracia es preferible a cualquier otra forma de gobierno'; \n 2 = 'En algunas circunstancias, un gobierno autoritario puede ser preferible a uno democratico'; \n 3 = 'A la gente como uno, nos da lo mismo un regimen democratico que uno autoritario'; \n 4 = 'Ninguna'; \n -888 = NA; \n -999 = NA\"),\n as.factor = TRUE) # convertir a factor\n \nproc_elsoc$jv_delincuentes <- car::recode(proc_elsoc$jv_delincuentes,\n recodes = c(\"1 = 'Nunca';\n 2 = 'Pocas veces';\n 3 = 'Algunas veces';\n 4 = 'Muchas veces';\n 5 = 'Siempre';\n -888 = NA; \n -999 = NA\"),\n as.factor = TRUE, # convertir a factor\n levels = c(\"Nunca\",\n \"Pocas veces\",\n \"Algunas veces\",\n \"Muchas veces\",\n \"Siempre\"))# ordenamos niveles\n \nproc_elsoc\n\n# A tibble: 980 × 5\n edad sexo ingreso autor_democ jv_delincuentes\n <dbl> <chr> <dbl> <fct> <fct> \n 1 38 Masculino 4000000 La democracia es preferible a cualqu… <NA> \n 2 45 Femenino 2700000 La democracia es preferible a cualqu… Algunas veces \n 3 42 Masculino 600000 A la gente como uno, nos da lo mismo… <NA> \n 4 29 Masculino 1250000 La democracia es preferible a cualqu… Nunca \n 5 53 Femenino 500000 En algunas circunstancias, un gobier… Algunas veces \n 6 52 Femenino NA A la gente como uno, nos da lo mismo… Pocas veces \n 7 50 Femenino NA En algunas circunstancias, un gobier… Siempre \n 8 57 Femenino 0 La democracia es preferible a cualqu… Muchas veces \n 9 47 Femenino 600000 La democracia es preferible a cualqu… Algunas veces \n10 79 Masculino NA En algunas circunstancias, un gobier… Nunca \n# ℹ 970 more rows\n\n\n\n\n\n\n\n\nNota\n\n\n\nComo se puede ver, los valores -888 y -999 fueron codificados como valores pérdidos ya que estos valores significan no sabe y no responde, respectivamente.\n\n\n\n\n4.4 Tratamiento casos pérdidos\nComúnmente, los datos con los que trabajamos suelen tener valores pérdidos o nulos que en R se denominan como NA. Estos valores no nos entregan información útil para nuestros análisis, y pueden generar problemas al momento de, por ejemplo, calcular medidas de tendencia central, u otros procedimientos estadísticos.\nHay diversas maneras de trabajar los valores nulos. Sin embargo, la más sencilla consiste en eliminar los valores nulos que se encuentran presentes en nuestros datos.\nEl primer paso es identificar valores nulos en el conjunto de datos en general, o en alguna variable en específico. Para ello, empleamos la función is.na().\n\nis.na(proc_elsoc)\n\nis.na(proc_elsoc$ingreso)\n\nPero esto es poco útil. Como opción, podemos sumar o contar la cantidad de valores pérdidos.\n\nsum(is.na(proc_elsoc))\n\n[1] 515\n\n\n¿Y si no sabemos qué variables o columnas tienen casos pérdidos? Una forma es usar la función colSums().\n\ncolSums(is.na(proc_elsoc))\n\n edad sexo ingreso autor_democ jv_delincuentes \n 0 0 435 13 67 \n\n\nUna vez identificamos los valores nulos, podemos proceder a removerlos de la base de datos. El comando na.omit() eliminará todas las filas que presenten casos perdidos.\n\nproc_elsoc <- na.omit(proc_elsoc)\n\nproc_elsoc\n\n# A tibble: 496 × 5\n edad sexo ingreso autor_democ jv_delincuentes\n <dbl> <chr> <dbl> <fct> <fct> \n 1 45 Femenino 2700000 La democracia es preferible a cualqu… Algunas veces \n 2 29 Masculino 1250000 La democracia es preferible a cualqu… Nunca \n 3 53 Femenino 500000 En algunas circunstancias, un gobier… Algunas veces \n 4 57 Femenino 0 La democracia es preferible a cualqu… Muchas veces \n 5 47 Femenino 600000 La democracia es preferible a cualqu… Algunas veces \n 6 39 Masculino 1350000 La democracia es preferible a cualqu… Muchas veces \n 7 42 Masculino 1100000 La democracia es preferible a cualqu… Muchas veces \n 8 51 Masculino 800000 La democracia es preferible a cualqu… Nunca \n 9 38 Masculino 1600000 A la gente como uno, nos da lo mismo… Algunas veces \n10 45 Femenino 500000 La democracia es preferible a cualqu… Nunca \n# ℹ 486 more rows"
+ "text": "4 Limpiar datos\nPara todos los subprocesos que involucra la “limpieza” de datos, tenemos al menos dos maneras. Por un lado, podemos usar las funciones de R base, es decir, que no requieren paquetes extras. Por el otro, podemos usar las funciones del paquete dplyr(), que es una gramática o dialecto de manipulación de datos que proporciona un conjunto de coherente funciones o “verbos” básicos para programar.\n\n\n\n\n\n\n\n\n\nPero, ¿por qué gramática y verbos? Porque a diferencia de otras formas de programar, dplyr() está orientado a escribir código como la escritura normal, es decir, de izquierda a derecha. Generalmente, la estructura de dplyr() es:\ndplyr::funcion(datos, variable1, variable2, variable_n)\nEn este práctico solo nos centraremos en manipular datos con dplyr(). Para conocer cómo hacer lo mismo pero con R base visita este enlace.\n\n\n4.1 Seleccionar\nUna vez tenemos claras cúales son las variables que nos interesan, las seleccionamos y almacenamos en una nueva base de datos. Esto debido que evitará confusiones y hará más eficiente nuestros analísis en términos de memoria.\nEn R base, el primer argumento dentro del bracket [] refiere a las filas y el segundo a las columnas. De manera similar, la función select() de dplyr facilita el trabajo a la hora de seleccionar variables. La estructura general del comando siempre es select(datos, variable1, variable2, variable3).\nHay distintas formas de usar select(), ¡veámoslas!\nPor indexación o ubicación en la base de datos:\n\ndplyr::select(elsoc_2022, 1, 2) # la primera y la segunda columna\n\ndplyr::select(elsoc_2022, 1:4) # la primera hasta la cuarta columna\n\ndplyr::select(elsoc_2022, c(1, 4, 5)) # la primera, la cuarta y la quinta columna\n\nTambién podemos usar el nombre de la variable/columna. Si conocemos el nombre de la variable simplemente lo podemos poner y se seleccionará. Con select() no es necesario poner los nombres con comillas \" \":\n\ndplyr::select(elsoc_2022, m0_sexo, m0_edad, m13)\n\n# A tibble: 1,000 × 3\n m0_sexo m0_edad m13\n <chr> <dbl> <dbl>\n 1 Hombre 38 4000000\n 2 Mujer 45 2700000\n 3 Hombre 42 600000\n 4 Hombre 29 1250000\n 5 Mujer 53 500000\n 6 Mujer 52 NA\n 7 Mujer 50 NA\n 8 Mujer 57 0\n 9 Mujer 47 600000\n10 Hombre 79 NA\n# ℹ 990 more rows\n\n\nOtra cosa que podemos hacer es renombrar las variables al momento de seleccionarlas, para que tengan un sentido más sustantivo para nosotros.\n\ndplyr::select(elsoc_2022, sexo = m0_sexo, edad = m0_edad, ingreso = m13)\n\n# A tibble: 1,000 × 3\n sexo edad ingreso\n <chr> <dbl> <dbl>\n 1 Hombre 38 4000000\n 2 Mujer 45 2700000\n 3 Hombre 42 600000\n 4 Hombre 29 1250000\n 5 Mujer 53 500000\n 6 Mujer 52 NA\n 7 Mujer 50 NA\n 8 Mujer 57 0\n 9 Mujer 47 600000\n10 Hombre 79 NA\n# ℹ 990 more rows\n\n\nPor último, podemos usar select() para reordenar nuestras variables, lo cual es importante por si por ejemplo utilizamos variables de identificación.\n\ndplyr::select(elsoc_2022, m0_edad, m0_sexo, c25, m13)\n\n# A tibble: 1,000 × 4\n m0_edad m0_sexo c25 m13\n <dbl> <chr> <dbl> <dbl>\n 1 38 Hombre 1 4000000\n 2 45 Mujer 1 2700000\n 3 42 Hombre 3 600000\n 4 29 Hombre 1 1250000\n 5 53 Mujer 2 500000\n 6 52 Mujer 3 NA\n 7 50 Mujer 2 NA\n 8 57 Mujer 1 0\n 9 47 Mujer 1 600000\n10 79 Hombre 2 NA\n# ℹ 990 more rows\n\n\nAhora, ¡apliquemos conocimientos! seleccionando y renombrando las variables de interés en un nueva base llamada proc_elsoc.\nEn este ejemplo utilizaremos las siguientes variables:\n\nm0_sexo: sexo del entrevistado\nm0_edad: edad del entrevistado\nm13: ingreso mensual entrevistado\nc25: preferencia entre autoritarismo y democracia\nf05_01: justificación violencia hacia delincuentes\n\n\nproc_elsoc <- dplyr::select(elsoc_2022, \n edad = m0_edad,\n sexo = m0_sexo,\n ingreso = m13,\n autor_democ = c25,\n jv_delincuentes = f05_01)\n\nproc_elsoc\n\n# A tibble: 1,000 × 5\n edad sexo ingreso autor_democ jv_delincuentes\n <dbl> <chr> <dbl> <dbl> <dbl>\n 1 38 Hombre 4000000 1 NA\n 2 45 Mujer 2700000 1 3\n 3 42 Hombre 600000 3 NA\n 4 29 Hombre 1250000 1 1\n 5 53 Mujer 500000 2 3\n 6 52 Mujer NA 3 2\n 7 50 Mujer NA 2 5\n 8 57 Mujer 0 1 4\n 9 47 Mujer 600000 1 3\n10 79 Hombre NA 2 1\n# ℹ 990 more rows\n\n\nEsta nueva base de datos sigue manteniendo los 1.000 casos/filas, pero ahora solo tiene 5 variables/columnas. ¿Qué pasa si solo quiero trabajar con un subconjunto de estos datos, por ejemplo, las mujeres mayores a 25 años? La respuesta es filtrar.\n\n\n4.2 Filtrar\nTal y como regularmente no trabajamos con todas las variables de una base de datos, no siempre desearemos trabajar con todas las observaciones que tenemos en los datos. Habrá ocasiones (varias) en las que querremos trabajar con casos que cumplan ciertas condiciones; que sean de determinada edad, residencia, tiempo o que simplemente hayan respondido de determinada forma una pregunta.\nCon dplyr podemos filtrar nuestros datos con el comando filter(), en el cual debemos especificar los datos y las condiciones que queremos aplicarle a determinadas variables.\n\ndplyr::filter(proc_elsoc, autor_democ == 1)\n\n# A tibble: 552 × 5\n edad sexo ingreso autor_democ jv_delincuentes\n <dbl> <chr> <dbl> <dbl> <dbl>\n 1 38 Hombre 4000000 1 NA\n 2 45 Mujer 2700000 1 3\n 3 29 Hombre 1250000 1 1\n 4 57 Mujer 0 1 4\n 5 47 Mujer 600000 1 3\n 6 39 Hombre 1350000 1 4\n 7 61 Mujer NA 1 3\n 8 25 Hombre NA 1 2\n 9 42 Hombre 1100000 1 4\n10 51 Hombre 800000 1 1\n# ℹ 542 more rows\n\n\nPara indicarle a R que nos filtre aquellos casos que cumplen con la condición de ser iguales a 1 (autor_democ == 1), usamos el operador ==. ¿Y esto de dónde salió? recuerda que los operadores en R los vimos en la segunda sesión\nTambién podemos agregar muchas condiciones para filtrar nuestros datos. Solamente debemos agregarlo, usando los operadores relacionales de R.\n\ndplyr::filter(proc_elsoc, autor_democ == 1 & edad >= 25)\n\n# A tibble: 544 × 5\n edad sexo ingreso autor_democ jv_delincuentes\n <dbl> <chr> <dbl> <dbl> <dbl>\n 1 38 Hombre 4000000 1 NA\n 2 45 Mujer 2700000 1 3\n 3 29 Hombre 1250000 1 1\n 4 57 Mujer 0 1 4\n 5 47 Mujer 600000 1 3\n 6 39 Hombre 1350000 1 4\n 7 61 Mujer NA 1 3\n 8 25 Hombre NA 1 2\n 9 42 Hombre 1100000 1 4\n10 51 Hombre 800000 1 1\n# ℹ 534 more rows\n\n\nPero, ¿y si tengo variables tipo character o factor? Tanto en R base como con dplyr podemos especificar condiciones y filtrar este tipo de datos usando las comillas \" \".\n\ndplyr::filter(proc_elsoc, sexo == \"Mujer\")\n\n# A tibble: 656 × 5\n edad sexo ingreso autor_democ jv_delincuentes\n <dbl> <chr> <dbl> <dbl> <dbl>\n 1 45 Mujer 2700000 1 3\n 2 53 Mujer 500000 2 3\n 3 52 Mujer NA 3 2\n 4 50 Mujer NA 2 5\n 5 57 Mujer 0 1 4\n 6 47 Mujer 600000 1 3\n 7 61 Mujer NA 1 3\n 8 78 Mujer NA 4 1\n 9 65 Mujer NA 1 1\n10 69 Mujer NA 2 1\n# ℹ 646 more rows\n\n\n¡Apliquémos conocimientos! Filtremos nuestros datos quedándonos solo con aquellos casos o personas que tengan o sean mayores a 25 años de edad.\n\nproc_elsoc <- dplyr::filter(proc_elsoc, edad >= 25)\n\nproc_elsoc\n\n# A tibble: 980 × 5\n edad sexo ingreso autor_democ jv_delincuentes\n <dbl> <chr> <dbl> <dbl> <dbl>\n 1 38 Hombre 4000000 1 NA\n 2 45 Mujer 2700000 1 3\n 3 42 Hombre 600000 3 NA\n 4 29 Hombre 1250000 1 1\n 5 53 Mujer 500000 2 3\n 6 52 Mujer NA 3 2\n 7 50 Mujer NA 2 5\n 8 57 Mujer 0 1 4\n 9 47 Mujer 600000 1 3\n10 79 Hombre NA 2 1\n# ℹ 970 more rows\n\n\n\n\n4.3 Recodificar\nUna parte fundamental del procesamiento e integración de datos es la recodificación de variables. Esto implica que, a determinadas variables, le aplicaremos ciertos cambios de acuerdo a ciertas reglas y criterios establecidos con anterioridad, siempre cuidando la coherencia con nuestro objetivo de investigación.\nHay múltiples formas de recodificar en R, pero en este ejemplo trabajaremos con el comando recode() del paquete car.\nEsta vez, recodificaremos las siguientes variables: sexo, ingreso, autor_democ y jv_delincuentes. Para esto, nos apoyaremos en el libro de códigos.\n\n\n\n\n\n\nTip\n\n\n\nEl comando recode() generalmente sigue esta estructura:\ncar::recode(datos$variable, recodes = c('valor_orig1=nuevo_valor1;valor_org2=nuevo_valor2'))\n\n\nRecodifiquemos las variables sexo e ingresos:\n\nproc_elsoc$sexo <- car::recode(proc_elsoc$sexo, recodes = c(\"'Hombre' = 'Masculino'; 'Mujer' = 'Femenino'\"))\n\nproc_elsoc$ingreso <- car::recode(proc_elsoc$ingreso, recodes = c(\"-888 = NA; -999 = NA\"))\n\nproc_elsoc\n\n# A tibble: 980 × 5\n edad sexo ingreso autor_democ jv_delincuentes\n <dbl> <chr> <dbl> <dbl> <dbl>\n 1 38 Masculino 4000000 1 NA\n 2 45 Femenino 2700000 1 3\n 3 42 Masculino 600000 3 NA\n 4 29 Masculino 1250000 1 1\n 5 53 Femenino 500000 2 3\n 6 52 Femenino NA 3 2\n 7 50 Femenino NA 2 5\n 8 57 Femenino 0 1 4\n 9 47 Femenino 600000 1 3\n10 79 Masculino NA 2 1\n# ℹ 970 more rows\n\n\nAhora recodifiquemos las demás variables. Además de recodificar valores propiamente tal, con recode() podemos indicarle, en la misma función, que convierta la variable a factor y/o que le asigne niveles (ej. para variables ordinales).\n\nproc_elsoc$autor_democ <- car::recode(proc_elsoc$autor_democ,\n recodes = c(\"1 = 'La democracia es preferible a cualquier otra forma de gobierno'; \n 2 = 'En algunas circunstancias, un gobierno autoritario puede ser preferible a uno democratico'; \n 3 = 'A la gente como uno, nos da lo mismo un regimen democratico que uno autoritario'; \n 4 = 'Ninguna'; \n -888 = NA; \n -999 = NA\"),\n as.factor = TRUE) # convertir a factor\n \nproc_elsoc$jv_delincuentes <- car::recode(proc_elsoc$jv_delincuentes,\n recodes = c(\"1 = 'Nunca';\n 2 = 'Pocas veces';\n 3 = 'Algunas veces';\n 4 = 'Muchas veces';\n 5 = 'Siempre';\n -888 = NA; \n -999 = NA\"),\n as.factor = TRUE, # convertir a factor\n levels = c(\"Nunca\",\n \"Pocas veces\",\n \"Algunas veces\",\n \"Muchas veces\",\n \"Siempre\"))# ordenamos niveles\n \nproc_elsoc\n\n# A tibble: 980 × 5\n edad sexo ingreso autor_democ jv_delincuentes\n <dbl> <chr> <dbl> <fct> <fct> \n 1 38 Masculino 4000000 La democracia es preferible a cualqu… <NA> \n 2 45 Femenino 2700000 La democracia es preferible a cualqu… Algunas veces \n 3 42 Masculino 600000 A la gente como uno, nos da lo mismo… <NA> \n 4 29 Masculino 1250000 La democracia es preferible a cualqu… Nunca \n 5 53 Femenino 500000 En algunas circunstancias, un gobier… Algunas veces \n 6 52 Femenino NA A la gente como uno, nos da lo mismo… Pocas veces \n 7 50 Femenino NA En algunas circunstancias, un gobier… Siempre \n 8 57 Femenino 0 La democracia es preferible a cualqu… Muchas veces \n 9 47 Femenino 600000 La democracia es preferible a cualqu… Algunas veces \n10 79 Masculino NA En algunas circunstancias, un gobier… Nunca \n# ℹ 970 more rows\n\n\n\n\n\n\n\n\nNota\n\n\n\nComo se puede ver, los valores -888 y -999 fueron codificados como valores pérdidos ya que estos valores significan no sabe y no responde, respectivamente.\n\n\n\n\n4.4 Tratamiento casos pérdidos\nComúnmente, los datos con los que trabajamos suelen tener valores pérdidos o nulos que en R se denominan como NA. Estos valores no nos entregan información útil para nuestros análisis, y pueden generar problemas al momento de, por ejemplo, calcular medidas de tendencia central, u otros procedimientos estadísticos.\nHay diversas maneras de trabajar los valores nulos. Sin embargo, la más sencilla consiste en eliminar los valores nulos que se encuentran presentes en nuestros datos.\nEl primer paso es identificar valores nulos en el conjunto de datos en general, o en alguna variable en específico. Para ello, empleamos la función is.na().\n\nis.na(proc_elsoc)\n\nis.na(proc_elsoc$ingreso)\n\nPero esto es poco útil. Como opción, podemos sumar o contar la cantidad de valores pérdidos.\n\nsum(is.na(proc_elsoc))\n\n[1] 515\n\n\n¿Y si no sabemos qué variables o columnas tienen casos pérdidos? Una forma es usar la función colSums().\n\ncolSums(is.na(proc_elsoc))\n\n edad sexo ingreso autor_democ jv_delincuentes \n 0 0 435 13 67 \n\n\nUna vez identificamos los valores nulos, podemos proceder a removerlos de la base de datos. El comando na.omit() eliminará todas las filas que presenten casos perdidos.\n\nproc_elsoc <- na.omit(proc_elsoc)\n\nproc_elsoc\n\n# A tibble: 496 × 5\n edad sexo ingreso autor_democ jv_delincuentes\n <dbl> <chr> <dbl> <fct> <fct> \n 1 45 Femenino 2700000 La democracia es preferible a cualqu… Algunas veces \n 2 29 Masculino 1250000 La democracia es preferible a cualqu… Nunca \n 3 53 Femenino 500000 En algunas circunstancias, un gobier… Algunas veces \n 4 57 Femenino 0 La democracia es preferible a cualqu… Muchas veces \n 5 47 Femenino 600000 La democracia es preferible a cualqu… Algunas veces \n 6 39 Masculino 1350000 La democracia es preferible a cualqu… Muchas veces \n 7 42 Masculino 1100000 La democracia es preferible a cualqu… Muchas veces \n 8 51 Masculino 800000 La democracia es preferible a cualqu… Nunca \n 9 38 Masculino 1600000 A la gente como uno, nos da lo mismo… Algunas veces \n10 45 Femenino 500000 La democracia es preferible a cualqu… Nunca \n# ℹ 486 more rows"
},
{
"objectID": "assignment/03-practico.html#transformar-variables",
"href": "assignment/03-practico.html#transformar-variables",
"title": "Práctica 3. Procesamiento, limpieza y manipulación de datos en R",
"section": "5 Transformar variables",
- "text": "5 Transformar variables\nUn último paso en el procesamiento de datos es la creación o derivación de nuevas variables a partir de los datos que ya tenemos. Esto es relevante no solo para procesar datos, sino porque permite generar variables que se alineen mucho mejor con nuestros objetivos de análisis.\nLa función mutate() de dplyr no solo nos permite recodificar variables, sino que también crear otras nuevas manteniendo las originales. Para este ejemplo usaremos dos funciones adicionales de dplyr que, al combinarlas con mutate(), podremos transformar variables de manera muy sencilla.\nEn este ejemplo, transformaremos las variables edad e ingresos, y crearemos una nueva variable llamada año de la encuesta y otra llamada ingreso_minimo.\n¡Veámos cómo se hace!\nGeneremos las nueva variable año:\n\nproc_elsoc <- mutate(proc_elsoc, ano = 2022)\n\nproc_elsoc\n\n# A tibble: 496 × 6\n edad sexo ingreso autor_democ jv_delincuentes ano\n <dbl> <chr> <dbl> <fct> <fct> <dbl>\n 1 45 Femenino 2700000 La democracia es preferible a … Algunas veces 2022\n 2 29 Masculino 1250000 La democracia es preferible a … Nunca 2022\n 3 53 Femenino 500000 En algunas circunstancias, un … Algunas veces 2022\n 4 57 Femenino 0 La democracia es preferible a … Muchas veces 2022\n 5 47 Femenino 600000 La democracia es preferible a … Algunas veces 2022\n 6 39 Masculino 1350000 La democracia es preferible a … Muchas veces 2022\n 7 42 Masculino 1100000 La democracia es preferible a … Muchas veces 2022\n 8 51 Masculino 800000 La democracia es preferible a … Nunca 2022\n 9 38 Masculino 1600000 A la gente como uno, nos da lo… Algunas veces 2022\n10 45 Femenino 500000 La democracia es preferible a … Nunca 2022\n# ℹ 486 more rows\n\n\n\nTransformar variables con case_when() e if_else()\nGeneremos nuevas variables para edad e ingresos dejándolas como tramos con case_when().\n\nproc_elsoc <- mutate(proc_elsoc,\n tramo_edad = case_when(edad <= 29 ~ \"Jovenes\",\n edad >= 30 & edad <= 59 ~ \"Adultos\",\n edad >= 60 ~ \"Adutos mayores\"))\n\n\nproc_elsoc <- mutate(proc_elsoc,\n tramo_ingreso = case_when(ingreso <= 250000 ~ \"Tramo 1\",\n ingreso > 250000 & ingreso <= 500000 ~ \"Tramo 2\",\n ingreso > 500000 & ingreso <= 750000 ~ \"Tramo 3\",\n ingreso > 750000 & ingreso <= 1000000 ~ \"Tramo 4\",\n ingreso > 1000000 ~ \"Tramo 5\"))\n\nproc_elsoc\n\n# A tibble: 496 × 8\n edad sexo ingreso autor_democ jv_delincuentes ano tramo_edad\n <dbl> <chr> <dbl> <fct> <fct> <dbl> <chr> \n 1 45 Femenino 2700000 La democracia es pr… Algunas veces 2022 Adultos \n 2 29 Masculino 1250000 La democracia es pr… Nunca 2022 Jovenes \n 3 53 Femenino 500000 En algunas circunst… Algunas veces 2022 Adultos \n 4 57 Femenino 0 La democracia es pr… Muchas veces 2022 Adultos \n 5 47 Femenino 600000 La democracia es pr… Algunas veces 2022 Adultos \n 6 39 Masculino 1350000 La democracia es pr… Muchas veces 2022 Adultos \n 7 42 Masculino 1100000 La democracia es pr… Muchas veces 2022 Adultos \n 8 51 Masculino 800000 La democracia es pr… Nunca 2022 Adultos \n 9 38 Masculino 1600000 A la gente como uno… Algunas veces 2022 Adultos \n10 45 Femenino 500000 La democracia es pr… Nunca 2022 Adultos \n# ℹ 486 more rows\n# ℹ 1 more variable: tramo_ingreso <chr>\n\n\nAhora, generemos una nueva variable llamada ingreso_minimo con la función if_else().\n\nproc_elsoc <- mutate(proc_elsoc,\n ingreso_minimo = if_else(ingreso < 410000, \"debajo minimo\", \"sobre minimo\"))\n\nselect(proc_elsoc, ingreso, ingreso_minimo) #veamosla!\n\n# A tibble: 496 × 2\n ingreso ingreso_minimo\n <dbl> <chr> \n 1 2700000 sobre minimo \n 2 1250000 sobre minimo \n 3 500000 sobre minimo \n 4 0 debajo minimo \n 5 600000 sobre minimo \n 6 1350000 sobre minimo \n 7 1100000 sobre minimo \n 8 800000 sobre minimo \n 9 1600000 sobre minimo \n10 500000 sobre minimo \n# ℹ 486 more rows"
+ "text": "5 Transformar variables\nUn último paso en el procesamiento de datos es la creación o derivación de nuevas variables a partir de los datos que ya tenemos. Esto es relevante no solo para procesar datos, sino porque permite generar variables que se alineen mucho mejor con nuestros objetivos de análisis.\nA diferencia de R base, con la función mutate() de dplyr podemos recodificar todas nuestras variables en un solo código si así lo queremos. Además, nos ahorramos especificar en todo momento la base de datos, ya que esa es la lógica de programación con dplyr().\nLa estructura de mutate() es generalmente esta:\ndplyr::mutate(datos, nueva_variable = funcion())\nAdemás, la función mutate() de dplyr no solo nos permite recodificar variables, sino que también crear otras nuevas manteniendo las originales. Para este ejemplo usaremos dos funciones adicionales de dplyr que, al combinarlas con mutate(), podremos transformar variables de manera muy sencilla.\nEn este ejemplo, transformaremos las variables edad e ingresos, y crearemos una nueva variable llamada año de la encuesta y otra llamada ingreso_minimo.\n¡Veámos cómo se hace!\nGeneremos las nueva variable año:\n\nproc_elsoc <- mutate(proc_elsoc, ano = 2022)\n\nproc_elsoc\n\n# A tibble: 496 × 6\n edad sexo ingreso autor_democ jv_delincuentes ano\n <dbl> <chr> <dbl> <fct> <fct> <dbl>\n 1 45 Femenino 2700000 La democracia es preferible a … Algunas veces 2022\n 2 29 Masculino 1250000 La democracia es preferible a … Nunca 2022\n 3 53 Femenino 500000 En algunas circunstancias, un … Algunas veces 2022\n 4 57 Femenino 0 La democracia es preferible a … Muchas veces 2022\n 5 47 Femenino 600000 La democracia es preferible a … Algunas veces 2022\n 6 39 Masculino 1350000 La democracia es preferible a … Muchas veces 2022\n 7 42 Masculino 1100000 La democracia es preferible a … Muchas veces 2022\n 8 51 Masculino 800000 La democracia es preferible a … Nunca 2022\n 9 38 Masculino 1600000 A la gente como uno, nos da lo… Algunas veces 2022\n10 45 Femenino 500000 La democracia es preferible a … Nunca 2022\n# ℹ 486 more rows\n\n\n\nTransformar variables con case_when() e if_else()\nGeneremos nuevas variables para edad e ingresos dejándolas como tramos con case_when().\n\nproc_elsoc <- mutate(proc_elsoc,\n tramo_edad = case_when(edad <= 29 ~ \"Jovenes\",\n edad >= 30 & edad <= 59 ~ \"Adultos\",\n edad >= 60 ~ \"Adutos mayores\"))\n\n\nproc_elsoc <- mutate(proc_elsoc,\n tramo_ingreso = case_when(ingreso <= 250000 ~ \"Tramo 1\",\n ingreso > 250000 & ingreso <= 500000 ~ \"Tramo 2\",\n ingreso > 500000 & ingreso <= 750000 ~ \"Tramo 3\",\n ingreso > 750000 & ingreso <= 1000000 ~ \"Tramo 4\",\n ingreso > 1000000 ~ \"Tramo 5\"))\n\nproc_elsoc\n\n# A tibble: 496 × 8\n edad sexo ingreso autor_democ jv_delincuentes ano tramo_edad\n <dbl> <chr> <dbl> <fct> <fct> <dbl> <chr> \n 1 45 Femenino 2700000 La democracia es pr… Algunas veces 2022 Adultos \n 2 29 Masculino 1250000 La democracia es pr… Nunca 2022 Jovenes \n 3 53 Femenino 500000 En algunas circunst… Algunas veces 2022 Adultos \n 4 57 Femenino 0 La democracia es pr… Muchas veces 2022 Adultos \n 5 47 Femenino 600000 La democracia es pr… Algunas veces 2022 Adultos \n 6 39 Masculino 1350000 La democracia es pr… Muchas veces 2022 Adultos \n 7 42 Masculino 1100000 La democracia es pr… Muchas veces 2022 Adultos \n 8 51 Masculino 800000 La democracia es pr… Nunca 2022 Adultos \n 9 38 Masculino 1600000 A la gente como uno… Algunas veces 2022 Adultos \n10 45 Femenino 500000 La democracia es pr… Nunca 2022 Adultos \n# ℹ 486 more rows\n# ℹ 1 more variable: tramo_ingreso <chr>\n\n\nAhora, generemos una nueva variable llamada ingreso_minimo con la función if_else().\n\nproc_elsoc <- mutate(proc_elsoc,\n ingreso_minimo = if_else(ingreso < 410000, \"debajo minimo\", \"sobre minimo\"))\n\nselect(proc_elsoc, ingreso, ingreso_minimo) #veamosla!\n\n# A tibble: 496 × 2\n ingreso ingreso_minimo\n <dbl> <chr> \n 1 2700000 sobre minimo \n 2 1250000 sobre minimo \n 3 500000 sobre minimo \n 4 0 debajo minimo \n 5 600000 sobre minimo \n 6 1350000 sobre minimo \n 7 1100000 sobre minimo \n 8 800000 sobre minimo \n 9 1600000 sobre minimo \n10 500000 sobre minimo \n# ℹ 486 more rows"
},
{
"objectID": "assignment/03-practico.html#guardar-y-exportar-datos-procesados",
diff --git a/docs/sitemap.xml b/docs/sitemap.xml
index caba3e7..310f4e4 100644
--- a/docs/sitemap.xml
+++ b/docs/sitemap.xml
@@ -2,118 +2,118 @@
https://descriptiva-2024.netlify.app/trabajos.html
- 2024-04-24T02:39:08.031Z
+ 2024-04-24T03:04:36.912Z
https://descriptiva-2024.netlify.app/schedule.html
- 2024-04-24T02:39:06.664Z
+ 2024-04-24T03:04:35.472Z
https://descriptiva-2024.netlify.app/resource/05-resource.html
- 2024-04-24T02:39:05.628Z
+ 2024-04-24T03:04:34.409Z
https://descriptiva-2024.netlify.app/resource/03-resource.html
- 2024-04-24T02:39:02.987Z
+ 2024-04-24T03:04:31.735Z
https://descriptiva-2024.netlify.app/resource/01-resource.html
- 2024-04-24T02:39:01.654Z
+ 2024-04-24T03:04:30.390Z
https://descriptiva-2024.netlify.app/class/index.html
- 2024-04-24T02:39:00.622Z
+ 2024-04-24T03:04:29.389Z
https://descriptiva-2024.netlify.app/class/08-class.html
- 2024-04-24T02:38:59.756Z
+ 2024-04-24T03:04:28.538Z
https://descriptiva-2024.netlify.app/class/06-class.html
- 2024-04-24T02:38:58.945Z
+ 2024-04-24T03:04:27.681Z
https://descriptiva-2024.netlify.app/class/04-class.html
- 2024-04-24T02:38:58.155Z
+ 2024-04-24T03:04:26.782Z
https://descriptiva-2024.netlify.app/class/02-class.html
- 2024-04-24T02:38:57.328Z
+ 2024-04-24T03:04:25.869Z
https://descriptiva-2024.netlify.app/assignment/index.html
- 2024-04-24T02:38:56.473Z
+ 2024-04-24T03:04:24.910Z
https://descriptiva-2024.netlify.app/assignment/07-practico.html
- 2024-04-24T02:38:54.848Z
+ 2024-04-24T03:04:22.937Z
https://descriptiva-2024.netlify.app/assignment/05-practico.html
- 2024-04-24T02:38:52.454Z
+ 2024-04-24T03:04:19.950Z
https://descriptiva-2024.netlify.app/assignment/03-practico.html
- 2024-04-24T02:39:28.373Z
+ 2024-04-24T03:04:17.392Z
https://descriptiva-2024.netlify.app/assignment/01-practico.html
- 2024-04-24T02:38:43.731Z
+ 2024-04-24T03:04:10.926Z
https://descriptiva-2024.netlify.app/assignment/02-practico.html
- 2024-04-24T02:38:44.859Z
+ 2024-04-24T03:04:12.152Z
https://descriptiva-2024.netlify.app/assignment/04-practico.html
- 2024-04-24T02:38:51.167Z
+ 2024-04-24T03:04:18.580Z
https://descriptiva-2024.netlify.app/assignment/06-practico.html
- 2024-04-24T02:38:53.767Z
+ 2024-04-24T03:04:21.660Z
https://descriptiva-2024.netlify.app/assignment/08-practico.html
- 2024-04-24T02:38:55.917Z
+ 2024-04-24T03:04:24.236Z
https://descriptiva-2024.netlify.app/class/01-class.html
- 2024-04-24T02:38:56.900Z
+ 2024-04-24T03:04:25.338Z
https://descriptiva-2024.netlify.app/class/03-class.html
- 2024-04-24T02:38:57.748Z
+ 2024-04-24T03:04:26.298Z
https://descriptiva-2024.netlify.app/class/05-class.html
- 2024-04-24T02:38:58.549Z
+ 2024-04-24T03:04:27.269Z
https://descriptiva-2024.netlify.app/class/07-class.html
- 2024-04-24T02:38:59.335Z
+ 2024-04-24T03:04:28.119Z
https://descriptiva-2024.netlify.app/class/09-class.html
- 2024-04-24T02:39:00.223Z
+ 2024-04-24T03:04:28.947Z
https://descriptiva-2024.netlify.app/index.html
- 2024-04-24T02:39:01.203Z
+ 2024-04-24T03:04:29.912Z
https://descriptiva-2024.netlify.app/resource/02-resource.html
- 2024-04-24T02:39:02.112Z
+ 2024-04-24T03:04:30.895Z
https://descriptiva-2024.netlify.app/resource/04-resource.html
- 2024-04-24T02:39:04.354Z
+ 2024-04-24T03:04:33.136Z
https://descriptiva-2024.netlify.app/resource/index.html
- 2024-04-24T02:39:06.037Z
+ 2024-04-24T03:04:34.823Z
https://descriptiva-2024.netlify.app/syllabus.html
- 2024-04-24T02:39:07.496Z
+ 2024-04-24T03:04:36.352Z