x <- 3.14 # double Valores Reales
typeof(x) [1] "double"
y <- 100L # integer Valores Enteros
typeof(y) [1] "integer"
z <- 1 + 2i # complex Valores Complejos
typeof(z)[1] "complex"
Representa valores numéricos y se dividen en double, integer y complex.
x <- 3.14 # double Valores Reales
typeof(x) [1] "double"
y <- 100L # integer Valores Enteros
typeof(y) [1] "integer"
z <- 1 + 2i # complex Valores Complejos
typeof(z)[1] "complex"
La función typeof(variable) retorna el tipo de variable.
Representa cadenas de texto y se deben escribir entre comillas simples o dobles.
equipo <- "Barcelona Sporting Club" # Cadena de texto del tipo caracter
typeof(equipo)[1] "character"
Representa valores booleanos (Verdadero o Falso).
es_mayor_de_edad <- TRUE # Variable del tipo Lógico
typeof(es_mayor_de_edad)[1] "logical"
es_soltero <- FALSE # Variable del tipo Lógico
typeof(es_soltero)[1] "logical"
Los vectores son una de las estructuras de datos fundamentales en R. Son conjuntos ordenados de elementos del mismo tipo, como números, cadenas de caracteres o valores lógicos.
Es una colección ordenada de datos del mismo tipo separados por , y van dentro de la función c().
nombres <- c("María", "Pepe", "Juan") # Vector de elementos del tipo caracter (character)
nombres # Presenta los elementos en `nombres`[1] "María" "Pepe" "Juan"
peso <- c(132.52, 140.62, 143.32) # Vector de elemtos del tipo real (double)
peso # Presenta los elementos en `peso`[1] 132.52 140.62 143.32
numero_hermanos <- c(3L, 1L, 2L) # Vector de elementos del tipo entero (integer)
numero_hermanos # Presenta los elementos en `numero_hermanos`[1] 3 1 2
Para obtener un elemento específico de un vector, indicamos la posición del elemento, por ejemplo, si se quiere obtener el nombre “María”, el peso de “Pepe” y el número de hermanos de “Juan” procedemos de la siguiente manera:
(nombres[1]) # María esta en la posición 1[1] "María"
(peso[2]) # El peso de Pepe esta en la posición 2[1] 140.62
(numero_hermanos[3]) # El número de hermanos de Juan esta en la posición 3[1] 2
Observación: Note que en R el primer elemento tiene índice 1, a diferencia de otros lenguajes como C o Python, en los cuales el índice 0 corresponde a el primer elemento. Esto es una regla general para indicar la posición de cualquier elemento en R.
Las operaciones con vectores son una parte esencial del análisis de datos en R.
+Se suman los elementos correspondientes de los vectores x e y. El resultado, es un nuevo vector que contiene la suma de cada par de elementos.
# Suma dos vectores
x <- c(1, 2, 3)
y <- c(4, 5, 6)
x + y[1] 5 7 9
-Se suman los elementos correspondientes de los vectores x e y. El resultado, es un nuevo vector que contiene la diferencia de cada par de elementos.
x - y[1] -3 -3 -3
*Se multiplican los elementos correspondientes de los vectores x e y. El resultado, es un nuevo vector que contiene el producto de cada par de elementos.
x * y[1] 4 10 18
/Se dividen los elementos correspondientes de los vectores x e y. El resultado, es un nuevo vector que contiene el cociente de cada par de elementos.
x / y[1] 0.25 0.40 0.50
Las matrices en R son una estructura de datos similar a los vectores, pero con dos dimensiones: filas y columnas. Esto permite almacenar y manipular conjuntos de datos más complejos. Existen varias formas de crear matrices en R:
matrix(): Esta función es la forma más básica de crear una matriz. Se le debe pasar como argumentos el número de filas y columnas, y los elementos de la matriz.
# Crea una matriz de 2x3 con números
(m <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 2, ncol = 3)) [,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
Note que toma los elementos por columna, es decir, toma los dos primeros elementos para la columna 1, luego los dos posteriores para la columna 2 y finalmente los dos últimos elementos para la columna 3.
Si se desea que tome los elemetos por fila, es decir, los 3 primeros elementos corresponden a la fila 1 y los 3 restantes a la fila 2, se indica el argumento byrow = TRUE, así
(m <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 2, ncol = 3, byrow = TRUE)) [,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
cbind(): Esta función se puede usar para crear una matriz concatenando vectores por columnas.
# Crea una matriz de 2x3 combinando vectores
x <- c(1, 2, 3)
y <- c(4, 5, 6)
(m <- cbind(x, y)) x y
[1,] 1 4
[2,] 2 5
[3,] 3 6
rbind(): Esta función se puede usar para crear una matriz concatenando vectores por filas.
# Crea una matriz de 3x2 combinando vectores
x <- c(1, 2, 3)
y <- c(4, 5, 6)
(m <- rbind(x, y)) [,1] [,2] [,3]
x 1 2 3
y 4 5 6
dim(): Esta función nos retorna las dimensiones de la matriz, el primer elemento es el número de filas y el segundo corresponde a las columnas.
dim(m)[1] 2 3
dim(m)[1] # Número de Filas[1] 2
dim(m)[2] # Número de columnas[1] 3
Las operaciones básicas con matrices son similares a las de los vectores, si las matrices tienen la dimensión correcta:
Suma (+): Suma los elementos correspondientes de dos matrices.
Resta (-): Resta los elementos correspondientes de dos matrices.
Multiplicación (*): Multiplica los elementos correspondientes de dos matrices.
División (/): Divide los elementos correspondientes de dos matrices.
En el caso de las matrices, se utiliza el operador %*% para realizar el producto matricial. Esta operación no es la misma que la multiplicación elemento a elemento, además, recuerde que para poder realizar el producto matricial, el numero de columnas de la matriz A debe ser igual al numero de columnas de la matriz B.
# Dos matrices
A <- matrix(c(1, 2, 3, 4), nrow = 2, ncol = 2)
B <- matrix(c(5, 6, 7, 8), nrow = 2, ncol = 2)# Multiplicación elemento a elemento
(C <- A * B) [,1] [,2]
[1,] 5 21
[2,] 12 32
# Multiplicación matricial
A <- matrix(c(1, 2, 3, 4, 5, 6, 7, 8), nrow = 2)
B <- matrix(c(5, 6, 7, 8), nrow = 4)
(A %*% B) # Producto Dimensiones Compatibles [,1]
[1,] 114
[2,] 140
Si se hace el producto B %*% A obtendrá un error en la ejecución con el mensaje Error in B %*% A : argumentos no compatibles.
Las matrices también admiten operaciones como:
Transposición (t): Transpone la matriz, intercambiando filas y columnas.
Determinante (det): Calcula el determinante de la matriz.
Inversa (solve): Calcula la inversa de la matriz.
La recolección de datos, como primer paso, implica la obtención de información de diversas fuentes como encuestas, experimentos, observación o web scraping. El registro de datos, como segundo paso, consiste en organizar y almacenar la información recolectada de forma que facilite su análisis.
Una vez que los datos están registrados, se pueden importar en R para su análisis. Existen diferentes funciones para importar datos en R, dependiendo del formato del archivo, en el entorno de R el tipo de objeto para el conjunto de datos es data frame.
Datos de Clientes
Este dataset contiene datos sobre la compra de cintas de correr por parte de los clientes de los cuales se obtuvo la siguiente información:
Product: nº de modelo de la cinta de correr
Age: Número de años del cliente
Gender: Género del cliente
Education: Educación en nº de años del cliente
MaritalStatus: Estado civil del cliente
Usage: Promedio de veces que el cliente desea utilizar la cinta cada semana
Fitness: Percepción de condición física del cliente (5 - muy en forma, 1 - muy poco en forma)
Ingresos: Ingresos del cliente
Miles: Kilómetros previstos de trote
Los datos se pueden encontrar generalmente en los siguientes tipos de archivos:
.csv
.xlsx
.txt
La función read.csv() de R permite importar datos desde un archivo CSV (Comma-Separated Values) de forma rápida y sencilla.
# Carga el archivo CSV
datos <- read.csv(file = "Fitness_csv.csv", # Nombre o Ruta del archivo .csv
sep = ",", # simbolo que separa las columnas
header = TRUE) # TRUE Si se tiene el nombre de las columnas dentro del archivo| Product | Age | Gender | Education | MaritalStatus | Usage | Fitness | Income | Miles |
|---|---|---|---|---|---|---|---|---|
| TM195 | 18 | Male | 14 | Single | 3 | 4 | 29562 | 112 |
| TM195 | 19 | Male | 15 | Single | 2 | 3 | 31836 | 75 |
| TM195 | 19 | Female | 14 | Partnered | 4 | 3 | 30699 | 66 |
| TM195 | 19 | Male | 12 | Single | 3 | 3 | 32973 | 85 |
| TM195 | 20 | Male | 13 | Partnered | 4 | 2 | 35247 | 47 |
| TM195 | 20 | Female | 14 | Partnered | 3 | 3 | 32973 | 66 |
La función read_excel() de la libreria readxl en R permite importar datos desde un archivo excel de la siguiente manera:
# install.package("readxl") # instala la libreria "readxl" (Descomentar si no esta instalada)
library(readxl) # Carga la libreria readxl
# Carga el archivo Excel
datos <- read_excel(path = "Fitness_excel.xlsx", # Nombre o Ruta del archivo .csv
col_names = TRUE) # TRUE Si se tiene el nombre de las columnas dentro de la primera fila| Product | Age | Gender | Education | MaritalStatus | Usage | Fitness | Income | Miles |
|---|---|---|---|---|---|---|---|---|
| TM195 | 18 | Male | 14 | Single | 3 | 4 | 29562 | 112 |
| TM195 | 19 | Male | 15 | Single | 2 | 3 | 31836 | 75 |
| TM195 | 19 | Female | 14 | Partnered | 4 | 3 | 30699 | 66 |
| TM195 | 19 | Male | 12 | Single | 3 | 3 | 32973 | 85 |
| TM195 | 20 | Male | 13 | Partnered | 4 | 2 | 35247 | 47 |
| TM195 | 20 | Female | 14 | Partnered | 3 | 3 | 32973 | 66 |
La función read.table() permite cargar archivos del tipo .txt de la siguiente manera:
datos <- read.table(file = "Fitness_txt.txt", # Nombre o Ruta del archivo .csv
header = TRUE) # TRUE Si se tiene el nombre de las columnas dentro de la primera fila
class(datos)[1] "data.frame"
| Product | Age | Gender | Education | MaritalStatus | Usage | Fitness | Income | Miles |
|---|---|---|---|---|---|---|---|---|
| TM195 | 18 | Male | 14 | Single | 3 | 4 | 29562 | 112 |
| TM195 | 19 | Male | 15 | Single | 2 | 3 | 31836 | 75 |
| TM195 | 19 | Female | 14 | Partnered | 4 | 3 | 30699 | 66 |
| TM195 | 19 | Male | 12 | Single | 3 | 3 | 32973 | 85 |
| TM195 | 20 | Male | 13 | Partnered | 4 | 2 | 35247 | 47 |
| TM195 | 20 | Female | 14 | Partnered | 3 | 3 | 32973 | 66 |
Un dataframe en R es una estructura de datos bidimensional similar a una hoja de cálculo. Está formado por filas y columnas, donde cada fila representa una observación individual y cada columna representa una variable. Las columnas pueden contener diferentes tipos de datos, como números, caracteres y otros tipos de datos como fechas y factores.
La indexación en R es una herramienta fundamental para acceder, manipular y analizar datos de forma precisa y eficiente. Permite navegar por la estructura de un dataframe, seleccionando filas, columnas y subconjuntos específicos de datos.
Un dataframe se compone de filas y columnas. Cada fila representa un registro individual, mientras que cada columna representa una variable o característica específica. La intersección de una fila y una columna define una celda que contiene un valor individual de datos.
Usaremos los datos de información de clientes que utilizan cintas de correr para los ejemplos posteriores:
Se cuenta con los siguientes Registros:
| Product | Age | Gender | Education | MaritalStatus | Usage | Fitness | Income | Miles |
|---|---|---|---|---|---|---|---|---|
| TM195 | 18 | Male | 14 | Single | 3 | 4 | 29562 | 112 |
| TM195 | 19 | Male | 15 | Single | 2 | 3 | 31836 | 75 |
| TM195 | 19 | Female | 14 | Partnered | 4 | 3 | 30699 | 66 |
| TM195 | 19 | Male | 12 | Single | 3 | 3 | 32973 | 85 |
| TM195 | 20 | Male | 13 | Partnered | 4 | 2 | 35247 | 47 |
| TM195 | 20 | Female | 14 | Partnered | 3 | 3 | 32973 | 66 |
Selección por posición: Permite acceder a filas o columnas específicas mediante su índice numérico.
Por ejemplo para seleccionar la primera fila hacemos:
datos[1, ] # el índice antes de la coma indica la posicion de la fila a seleccionar del conjunto de datos Product Age Gender Education MaritalStatus Usage Fitness Income Miles
1 TM195 18 Male 14 Single 3 4 29562 112
Mientras que para seleccionar la segunda columna que corresponde a las edades hacemos:
datos[, 2] # el índice despues de la coma indica la posición de la columna a seleccionar del conjunto de datos [1] 18 19 19 19 20 20 21 21 21 21 22 22 22 22 23 23 23 23 23 23 23 23 24 24 24
[26] 24 24 25 25 25 25 25 25 25 26 26 26 26 26 26 26 27 27 27 28 28 28 28 28 28
[51] 29 29 29 30 30 31 31 32 32 33 33 34 34 35 35 35 36 37 38 38 38 38 39 40 41
[76] 43 44 46 47 50 19 20 20 20 21 21 21 23 23 23 23 23 23 23 24 24 24 25 25 25
[101] 25 25 25 25 25 25 25 25 26 26 26 27 29 30 30 31 31 31 32 32 33 33 33 33 33
[126] 34 34 34 35 35 35 35 37 38 38 40 40 40 45 48 22 22 22 23 23 23 24 24 24 24
[151] 25 25 25 25 25 25 25 26 26 27 27 27 28 28 28 29 29 30 30 30 31 33 34 35 38
[176] 40 42 45 47 48
Si no se especifica el numero de fila o columna a seleccionar se retorna todas las filas o columnas.
Selección por nombre: Es posible acceder a columnas por el nombre de la variable usando el simbolo $. Por ejemplo para acceder a la columna Age
datos$Age [1] 18 19 19 19 20 20 21 21 21 21 22 22 22 22 23 23 23 23 23 23 23 23 24 24 24
[26] 24 24 25 25 25 25 25 25 25 26 26 26 26 26 26 26 27 27 27 28 28 28 28 28 28
[51] 29 29 29 30 30 31 31 32 32 33 33 34 34 35 35 35 36 37 38 38 38 38 39 40 41
[76] 43 44 46 47 50 19 20 20 20 21 21 21 23 23 23 23 23 23 23 24 24 24 25 25 25
[101] 25 25 25 25 25 25 25 25 26 26 26 27 29 30 30 31 31 31 32 32 33 33 33 33 33
[126] 34 34 34 35 35 35 35 37 38 38 40 40 40 45 48 22 22 22 23 23 23 24 24 24 24
[151] 25 25 25 25 25 25 25 26 26 27 27 27 28 28 28 29 29 30 30 30 31 33 34 35 38
[176] 40 42 45 47 48
Subconjuntos: Se pueden combinar las técnicas de selección para obtener subconjuntos específicos de datos. Por ejemplo para seleccionar los primeros tres registros de Age, Gender y Education se selecciona las filas 1 a 3 y las columnas 2 a 4.
datos[1:3, 2:4]| Age | Gender | Education |
|---|---|---|
| 18 | Male | 14 |
| 19 | Male | 15 |
| 19 | Female | 14 |