1.3 R un poco mas avanzado…

Ya vimos brevemente como crear datos en R, un par de estructuras y como exportarlos. Vamos a hablar ahora un poco sobre como hacer cambios en la estructura de los datos (i.e. procesamiento).

1.3.1 for loops

Un for loop es una estructura de control en R que permite repetir una acción una cierta cantidad de veces. Por ejemplo, para imprimir los números del 1 al 10, se puede usar el siguiente for loop:

for (i in 1:10) {
    print(i)
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10

Este for loop recorrerá el vector 1:10 e imprimirá cada elemento del vector. La variable i es una variable temporal que se usa para almacenar los valores del vector. Esto quiere decir que cada vez que el for loop se ejecuta, i tomará el valor del elemento actual del vector.

Los for loops también se pueden usar para realizar operaciones matemáticas. Por ejemplo, para realizar la suma de los números del 1 al 10, se puede usar el siguiente for loop:

suma <- 0
for (i in 1:10) {
    suma <- suma + i
}
print(suma)
## [1] 55

En este for loop, la variable suma se usa para almacenar el resultado de la suma. Cada vez que el for loop se ejecuta, el valor de suma se actualiza con el resultado de la suma de la variable i. Al final de la ejecución, el valor de suma será 55`.

1.3.2 Vectorizando

R es un lenguaje de computación vectorizado, lo que significa que los bucles for no son necesarios para realizar operaciones matemáticas. Esto permite que se realicen operaciones más rápido y con menos código. Por ejemplo, para realizar la suma de los números del 1 al 10, no se necesita usar un for loop. En su lugar, se puede usar la función sum() de la siguiente manera:

suma <- sum(1:10)
print(suma)
## [1] 55

Esto imprimirá el mismo resultado que el for loop anterior (55).

Vectorizar los cálculos también es útil para realizar operaciones con matrices. Por ejemplo, para calcular el promedio de los elementos de la matriz mi_matriz, se puede usar la función mean() de la siguiente manera:

promedio <- mean(mi_matriz)
print(promedio)
## [1] 5

Esto imprimirá el promedio de los elementos de la matriz (5`).

1.3.3 Funciones de la familia *apply

Las funciones de la familia apply son un conjunto de funciones de R que permiten aplicar una función a una matriz de forma vectorizada. Esto significa que se pueden realizar operaciones matemáticas sin usar bucles for. Por ejemplo, para calcular la suma de los elementos de la matriz mi_matriz, se puede usar la función apply() de la siguiente manera:

suma <- apply(mi_matriz, 1, sum)
print(suma)
## [1] 12 15 18

Esto imprimirá la suma de los elementos de cada fila (por eso el segundo elemento es 1) de la matriz (6, 15, 24).

Otras funciones de la familia apply son lapply(), sapply() y mapply(). Estas funciones se usan para aplicar una función a una lista, vector o matriz, respectivamente. Por ejemplo, para calcular el promedio de los elementos de la matriz mi_matriz, se puede usar la función apply() de la siguiente manera:

promedio <- apply(mi_matriz, 2, mean)
print(promedio)
## [1] 2 5 8

Esto imprimirá el promedio de los elementos de cada columna de la matriz (2, 5, 8).

1.3.4 data.table

data.table es un paquete de R que permite manipular grandes cantidades de datos de una manera más eficiente que otros paquetes. Por ejemplo, para cargar un conjunto de datos en R, se puede usar la función read.csv(). Sin embargo, esta función puede ser muy lenta cuando se trabaja con grandes conjuntos de datos. En su lugar, se puede usar la función fread() de data.table para cargar los datos de una manera más rápida. Por ejemplo, para cargar el conjunto de datos mi_datos.csv, se puede usar la siguiente línea:

library(data.table)
mi_matriz <- fread("mi_matriz.csv")

Además de la carga de datos, data.table también permite realizar operaciones de manipulación y agregación de datos de una manera más eficiente que otras funciones. Por ejemplo, para calcular el promedio de los datos en la tabla mi_datos, se puede usar la función data.table() de la siguiente manera:

promedio <- data.table(mi_matriz)[, mean(mi_matriz$valor)]
## Warning in mean.default(mi_matriz$valor): argument is not numeric or
## logical: returning NA
print(promedio)
## [1] NA

Esto imprimirá el promedio de los datos en la tabla.

1.3.5 El tidyverso

Tidyverse es un conjunto de paquetes y herramientas de R que permiten realizar análisis de datos de manera más eficiente y fácil. Estos paquetes incluyen dplyr, tidyr, ggplot2, readr y purrr. Estos paquetes se usan para realizar operaciones de manipulación, agregación, visualización y análisis de datos.

1.3.6 dplyr

Dplyr es un paquete de R que permite manipular grandes conjuntos de datos de una manera más eficiente. Esto se logra usando una sintaxis fácil de leer y entender. Por ejemplo, para filtrar los datos en la tabla mi_datos, se puede usar la función filter() de dplyr de la siguiente manera:

library(tidyverse)
mi_matriz[,-1] %>%
  summarise(across(everything(), mean))
##   V1 V2 V3
## 1  2  5  8

dplyr también cuenta con otras funciones útiles como arrange() para ordenar los datos, select() para seleccionar las columnas deseadas y mutate() para crear nuevas columnas. Estas herramientas permiten realizar operaciones de manipulación de datos de manera mucho más eficiente.