From 32e88917396a562f9b8394224ffcd244c8e66c9d Mon Sep 17 00:00:00 2001 From: Evelia Lorena Coss-Navarrete <49405921+EveliaCoss@users.noreply.github.com> Date: Sun, 11 Feb 2024 19:58:45 -0600 Subject: [PATCH] Add files via upload --- Clase1/D3_ManipulacionDatos_P2.Rmd | 683 ++++ Clase1/D3_ManipulacionDatos_P2.html | 5087 +++++++++++++++++++++++++++ 2 files changed, 5770 insertions(+) create mode 100644 Clase1/D3_ManipulacionDatos_P2.Rmd create mode 100644 Clase1/D3_ManipulacionDatos_P2.html diff --git a/Clase1/D3_ManipulacionDatos_P2.Rmd b/Clase1/D3_ManipulacionDatos_P2.Rmd new file mode 100644 index 0000000..6e9bb9d --- /dev/null +++ b/Clase1/D3_ManipulacionDatos_P2.Rmd @@ -0,0 +1,683 @@ +--- +title: "Manipulación de datos con R base (matrix y lista)" +subtitle: "VieRnes de Bioinformatica" +author: "Dra. Evelia Coss" +institute: "LIIGH, UNAM" +date: "2024/02/16" +output: + xaringan::moon_reader: + css: + - xaringan-themer.css + - css/mi-tema.css + - default + - rladies + - rladies-fonts + lib_dir: libs + seal: false + self_contained: true + nature: + highlightStyle: googlecode + highlightLines: true + countIncrementalSlides: false + ratio: 16:9 + beforeInit: "macros.js" + slideNumberFormat: "%current%/%total%" # Numeracion de paginas en el estilo 12/42 + +--- +```{r setup, include = FALSE} +# Setup chunk +# Paquetes a usar +#options(htmltools.dir.version = FALSE) cambia la forma de incluir código, los colores + +library(knitr) +library(tidyverse) +library(xaringanExtra) +library(icons) +library(fontawesome) +library(emo) + +# set default options +opts_chunk$set(collapse = TRUE, + dpi = 300, + warning = FALSE, + error = FALSE, + comment = "#") + +top_icon = function(x) { + icons::icon_style( + icons::fontawesome(x), + position = "fixed", top = 10, right = 10 + ) +} + +knit_engines$set("yaml", "markdown") + +# Con la tecla "O" permite ver todas las diapositivas +xaringanExtra::use_tile_view() +# Agrega el boton de copiar los códigos de los chunks +xaringanExtra::use_clipboard() + +# Crea paneles impresionantes +xaringanExtra::use_panelset() + +# Para compartir e incrustar en otro sitio web +xaringanExtra::use_share_again() +xaringanExtra::style_share_again( + share_buttons = c("twitter", "linkedin") +) + +# Funcionalidades de los chunks, pone un triangulito junto a la línea que se señala +xaringanExtra::use_extra_styles( + hover_code_line = TRUE, #<< + mute_unhighlighted_code = TRUE #<< +) + +# Agregar web cam + +xaringanExtra::use_webcam() +``` + +```{r xaringan-editable, echo=FALSE} +# Para tener opciones para hacer editable algun chunk +xaringanExtra::use_editable(expires = 1) +# Para hacer que aparezca el lápiz y goma +xaringanExtra::use_scribble() +``` + +```{r xaringan-themer, include=FALSE, warning=FALSE} +# Establecer colores para el tema +library(xaringanthemer) +#style_mono_light(base_color = "#562457") +``` + +class: title-slide, middle, center +background-image: url(imagenes/liigh_unam_logo.png) +background-position: 10% 10% +background-size: 15% + + +.center-column[ +# `r rmarkdown::metadata$title` +### `r rmarkdown::metadata$subtitle` + +####`r rmarkdown::metadata$author` +#### `r rmarkdown::metadata$date` +] + +--- + +.center[ + +] + +--- +## Matriz (matrix) + +```{r} +# Opcion A +x <- matrix(c(1,2,3,4,5,6), nrow = 2, ncol = 3) +x +``` +Ahora que ya conocemos las funciones `seq()` y `seq_len()` podemos crear la matriz de esta manera: + +```{r, eval=FALSE} +# Opcion B +x <- matrix(seq(1,6), nrow = 2, ncol = 3) +# Opcion C +x <- matrix(seq_len(6), nrow = 2, ncol = 3) +``` + +--- +## Extraer elementos de una matriz (matrix) + +Al igual que con los dataframe usaremos las filas y columnas (x[fila, columna]) para extraer la información. + +```{r} +x[2,3] +``` +Obtener la información de la columna 1. + +```{r} +x[,1] +``` + +--- + +## Extraer elementos de una matriz (matrix) + +A diferencia del error que nos daria si no respetamos el [fila, columna], en las matrices si nos dara una salida: + +```{r} +x[2] +``` +Nos da el 2nd elemento contenido en la matriz, recuerdas que los elementos de la matriz al declararla eran c(1,2,3,4,5,6). + +> NOTA: Para evitar complicaciones es mejor usar la manera [fila, columna]. + +--- + +## Ejercicios: + +1) Genera una matriz de tamano 2 x 3 (filas, columnas) (rows, columns) + +```{r eval=FALSE} +# Opcion A +x <- matrix(1:6, nrow = 2, ncol = 3) +# Opcion B +x <- matrix(1:6, 2, 3) +x +``` + +2) Sustituir los valores presentes en la columna 3 de la matriz, por los valores 10 y 15 + +```{r} +x[, 3] <- c(10,15) +x +``` + +--- + +## Ejercicios: + +3) Visualizacion en modo de vector + +```{r} +x[, 3] +``` +4) Visualizacion en modo de matriz + +```{r} +x[, 3, drop = FALSE] +``` + +-- +> NOTA: Por default se encuentra como `drop = TRUE` dentro del codigo interno, si queremos visualizar nuestros datos como una matriz de salida, podriamos cambiarlo a `drop = FALSE`. + +--- + +## Ejercicios: + +5) Eliminar la columna 1 + +```{r} +x[, -1] +``` + +6) Eliminar multiples columnas y Visualizacion en modo de matriz + +```{r} +x[, -(1:2), drop = FALSE] # es lo mismo que x[, 3, drop = FALSE] +``` + +--- + +## Tambien podemos usar `drop = FALSE` en los dataframes + +En la clase anterior visualizamos los cambios que podemos realizarle al siguiente dataframe. + +```{r} +df <- data.frame(genes = paste0("Gen", seq_len(8)), + expression = c(3.8, 5.5, 6.3, 1.8, 9, rep(3,3)), + treatment =c(rep("Control", 4), rep("Condicion1",4))) +``` + +Si quiero visualizar los primeros 3 datos de la columna 1 en forma de matriz + +```{r} +head(df[,2, drop = FALSE],3) +``` + +--- + +## Propiedades de las matrices + +Estructura de la matriz: + +```{r} +str(x) +class(x) +``` +Dimensiones: + +```{r} +dim(x) +``` +A diferencia de una dataframe, en la matriz el nombre de las filas y columnas es un valor `NULL`. + +```{r} +rownames(x) +colnames(x) +``` + +--- + +## Renombrar filas y columnas en la matriz + +Recuerda que es una matriz de 2 filas con 3 columnas: + +```{r} +# Renombrar filas +rownames(x) <- c("Gen1", "Gen2") +x +``` + +```{r} +# Renombrar columnas +colnames(x) <- c("Condicion1", "Condicion2", "Condicion3") +x +``` + +--- + +## Operaciones en una matriz + +Dividir toda la matriz entre 2. + +```{r} +x / 2 +``` +Elevar a la 2: + +```{r} +x ** 3 +``` + +--- + +## Transponer o invertir la matriz + +Usando la funcion `t()`. Se puede emplear en un dataframe tambien. + +```{r} +t(x) +``` + +--- + +## Agregar información en la matriz (por columnas) + +```{r} +# matriz 1 +matriz1 <- matrix(c("apple", "banana", "cherry", "orange","grape", "pineapple", "pear", "melon", "fig"), nrow = 3, ncol = 3) + +# matriz 2 +matriz2 <- matrix(c("strawberry", "blueberry", "raspberry"), nrow = 3, ncol = 1) + +# Juntar matrices +newmatrix <- cbind(matriz1, matriz2) +newmatrix +``` +> NOTA: `cbind()` nos permite unir por columnas las dos matrices, respetando que ambas tienen 3 filas. + +--- + +## Agregar información en la matriz (por filas) + +```{r} +# Crear una nueva matriz mientras juntamos a la matriz 1 +newmatrix <- rbind(matriz1, c("strawberry", "blueberry", "raspberry")) +newmatrix +``` + +> NOTA: `rbind()` nos permite unir por filas respetando que tenemos 3 elementos por fila. + +--- + +## Extraer datos en una matriz + +Para un solo elemento, visualizacion tipo matriz + +```{r} +# Opcion A +newmatrix == "apple" +``` +Para un solo elemento, visualizacion tipo vector + +```{r} +# Opcion B +newmatrix %in% "apple" +``` + +--- + +## Extraer datos en una matriz + +Para multiples elementos, visualizacion tipo matriz + +```{r} +# Opcion A +newmatrix == c("apple", "melon") +``` + +Para multiples elementos, visualizacion tipo vector + +```{r} +# Opcion B +newmatrix %in% c("apple", "melon") +``` + +--- + +class: center, middle + +`r fontawesome::fa("code", height = "3em")` +# Descanso de 10 min +## Volvemos con: Manipulación de datos con R base de listas + +Respira, ve a hacer tus necesidades y coméntame tus dudas. + +--- + +## Crear una lista (list) + +Primero veamos como se declara una lista y su estructura: + +```{r} +# Declarar una lista, cada elemento esta separado por una coma +mylist <- list("8", c(1,2,3)) +mylist +``` +Estructura de la lista + +```{r} +str(mylist) +``` + +--- + +## Crear una lista (list) + +Una lista puede contener vectores y matrices dentro: + +```{r} +myvector <- 1:10 +mymatrix <- matrix(1:4, nrow = 2) +mydf <- data.frame("num" = 1:3, "let" = c("a", "b", "c")) +``` + +Guardamos todo en la lista: + +```{r} +mylist <- list( + "vector" = myvector, + "matriz" = mymatrix, + "dataframe" = mydf +) + +str(mylist) +``` + +--- + +## Propiedades de una lista + +El largo de una lista es igual al número de elementos que contiene, sin importar de qué tipo o clase sean. + +```{r} +length(mylist) +``` +Dado que una lista siempre tiene una sola dimensión, la función dim() nos devuelve `NULL`. + +```{r} +dim(mylist) +``` + +Las listas tienen clase list, sin importar qué elementos contienen. + +```{r} +class(mylist) +``` + +--- + +## Extraer elementos de una lista + +Para una lista, puede utilizar corchetes simples [ ] o corchetes dobles [[ ]], dependiendo de lo que desee extraer. + +.pull-left[ + +```{r} +mylist <- list(myvector, mymatrix, mydf) +mylist +``` +] + +.pull-right[ +Elementos en esta lista, las sublistas: + +* [[1]] - Vector (myvector) +* [[2]] - Matriz (mymatrix) +* [[3]] - dataframe (mydf) +] +--- + +## Extraer elementos de una lista + +Podemos utilizar [ ] para extraer una sublista que sólo contenga, por ejemplo, el primer elemento, que es el vector + +```{r} +mylist[1] +``` + +--- + +## Extraer elementos de una lista + +Tambien podemos utilizar [[ ]] para extraer un único elemento, que tendrá la clase de ese elemento. + +```{r} +mylist[[1]] +``` +En este caso para obtener el primer elemento de esta sublista, emplearemos lo visto en la clase anterior sobre dataframe. + +```{r} +mylist[[1]][1] +``` + +--- + +## Extraer elementos de una lista + +Asignar nombres a cada sublista + +```{r} +names(mylist) = c("vector", "matriz", "dataframe") +``` + +Para obtener una sublista, podemos emplear lo visto para dataframe, empleando el nombre de la sublista. + +```{r} +mylist$vector +``` +O puedes usar: + +```{r} +mylist[["vector"]] +``` + +--- + +## Extraer elementos de una lista + +Entonces para obtener el primer elemento de la sublista vector puedo hacerlo de la siguiente manera: + +```{r} +# Opcion A +mylist[[1]][1] + +# Opcion B +mylist$vector[1] + +# Opcion C +mylist[["vector"]][1] +``` + +--- + +## Otra forma de extraer elementos de una lista + +Extraer el 3er elemento de la primera sublista. + +```{r} +# Opcion A +mylist[[1]][3] + +# Opcion B +mylist[[c(1, 3)]] +``` +> NOTA: Dentro del c(), primero colocamos la sublista y luego el elemento. c(sublista, elemento). + +--- + +## Extraer multiples sublistas + +Si queremos las dos primeras sublistas, usaremos [] para seleccionarlas + +```{r} +# Opcion A +mylist[c(1, 2)] + +# Opcion B +mylist[c("vector", "matriz")] +``` +> NOTA: Son [] simples para llamar sublistas y [[]] para nombrar a los elementos de las sublistas. + +--- + +## Operaciones en una lista + +Podemos realizar operaciones si especificamos a que elemento de la lista queremos ejecutarle alguna operacion. + +```{r} +mylist[[1]] * 2 +``` +> NOTA: No olvides los [[]] para indicar los elementos contenidos en la lista. + +--- + +## Filtrar algunos elementos + +Podemos emplear nuestros conocimientos previos para buscar elementos en una sublista: + +```{r} +# Ejemplo 1 +mylist$matriz[mylist$matriz == 2] + +# Ejemplo 2 +mylist$dataframe[mylist$dataframe == "a"] +``` + +--- + +## Sustituir un elemento + +```{r} +mylist$matriz[1] <- 5 +mylist$matriz +``` + +--- + +## Eliminar una sublista + +Para eliminar una sublista debemos darle el valor de `NULL`. En este caso eliminaremos el primera sublista (elemento) que es el vector. + +```{r} +mylist[[1]] = NULL +mylist +``` + +--- + +## Agregar una nueva sublista + +Para agregar una sublista usaremos `$`. + +```{r} +mylist$occupation <- "Analista de datos" +mylist +``` + +--- + +## Agregar una lista existente + +```{r} +frutas <- list( c("manzana", "pera", "uva")) + +mylist <- c(mylist, "frutas" = frutas) +mylist +``` + +--- + +## Usar `append()` + +Sirve para agregar elementos a una lista. Toma tres argumentos: la lista original, los elementos a añadir y la posición en la vamos a añadirlos. + + +```{r} +append(mylist, #lista original + list(c("azul", "rojo", "verde", "negro")), #elementos por agregar en formato de lista + after = 2 # Posicion + ) +``` + +--- +class: center, middle + +`r fontawesome::fa("code", height = "3em")` +# Viernes 23 de febrero 2024 +## Introducción a Rmarkdown - Alejandra Schäfer + +Gracias por tu atención, respira y coméntame tus dudas. + +--- + +## Ejercicios + +1) Crea una lista con los nombres de los amigos, Rosita, Rachel y Joey. La lista debe llamarse `friends`. NOTA: Cada amigo es una sublista. + +2) Agrega a la lista el nombre de Carlos, despues de Rachel. Empleando la funcion `append()` + +3) Agrega a los amigos Monica y Carmen, al final de la lista. Emplea `c()`. + +4) Elimina a Carlos de la lista de friends. + +--- + +## Ejercicios: Respuestas + +1) Crea una lista con los nombres de los amigos, Rosita, Rachel y Joey. La lista debe llamarse `friends`. NOTA: Cada amigo es una sublista. + +```{r, eval=FALSE} +friends <- list("Rosita", "Rachel", "Joey") +``` + +2) Agrega a la lista el nombre de Carlos, despues de Rachel. Empleando la funcion `append()` + +```{r, eval=FALSE} +friends <- append(friends, "Carlos", after = 2) +``` + +3) Agrega a los amigos Monica y Carmen, al final de la lista. Emplea `c()`. + +```{r, eval=FALSE} +friends <- c(friends, "Monica", "Carmen") +``` + +4) Elimina a Carlos de la lista de friends. + +```{r, eval=FALSE} +friends[[3]] = NULL +``` + + + + + + + + + + diff --git a/Clase1/D3_ManipulacionDatos_P2.html b/Clase1/D3_ManipulacionDatos_P2.html new file mode 100644 index 0000000..bc5633f --- /dev/null +++ b/Clase1/D3_ManipulacionDatos_P2.html @@ -0,0 +1,5087 @@ + + + + Manipulación de datos con R base (matrix y lista) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +