tasas_nom <- c(7.5,6.5,5.5)
precios <- c(250000,350000,450000)
plazos <- c(36,48,60,72)
tasas_mensuales <- round(tasas_nom/100/12,6)
tasas_matriz <- matrix(rep(tasas_mensuales,4),nrow = 4, byrow = T)
precios_matriz <- matrix(rep(precios,4), nrow = 4, byrow = T)
plazos_matriz <- matrix(rep(plazos,3), nrow = 4, byrow = F)
pagos_mensuales <- precios_matriz * tasas_matriz / (1-(1+tasas_matriz)^(-plazos_matriz))
rownames(pagos_mensuales) <- c("36 m","48 m","60 m","72 m")
colnames(pagos_mensuales) <- c("Modelo A","Modelo B","Modelo C")
pagos_mensuales
## Modelo A Modelo B Modelo C
## 36 m 7776.555 10727.215 13588.075
## 48 m 6044.725 8300.298 10465.332
## 60 m 5009.487 6848.217 8595.440
## 72 m 4322.528 5883.542 7351.965
Los índices en matrices son utilizados para acceder, modificar, o extraer elementos específicos dentro de la matriz. Los índices en R funcionan de la siguiente manera:
Para acceder a un elemento específico de una matriz, se usa la notación [fila, columna].
# Seleccionamos el dato de la primera fila y segunda columna
pagos_mensuales; pagos_mensuales[1,2]
## Modelo A Modelo B Modelo C
## 36 m 7776.555 10727.215 13588.075
## 48 m 6044.725 8300.298 10465.332
## 60 m 5009.487 6848.217 8595.440
## 72 m 4322.528 5883.542 7351.965
## [1] 10727.21
# pago mensual en financiamiento a 36 m de Modelo B
Para acceder a toda una fila, se deja en blanco la parte del índice de la columna:
# Seleccionamos todos los pagos mensuales del
# financiamiento a 60 meses
pagos_mensuales; pagos_mensuales[3,]
## Modelo A Modelo B Modelo C
## 36 m 7776.555 10727.215 13588.075
## 48 m 6044.725 8300.298 10465.332
## 60 m 5009.487 6848.217 8595.440
## 72 m 4322.528 5883.542 7351.965
## Modelo A Modelo B Modelo C
## 5009.487 6848.217 8595.440
Para acceder a toda una columna, se deja en blanco la parte del índice de la fila:
# Selccionamos todos los pagos para
# financiar el Modelo B
pagos_mensuales[,2]
## 36 m 48 m 60 m 72 m
## 10727.215 8300.298 6848.217 5883.542
Imaginemos que después de calcular los pagos mensuales, la gerencia quiere responder algunas preguntas específicas:
pagos_mensuales
## Modelo A Modelo B Modelo C
## 36 m 7776.555 10727.215 13588.075
## 48 m 6044.725 8300.298 10465.332
## 60 m 5009.487 6848.217 8595.440
## 72 m 4322.528 5883.542 7351.965
pagos_mensuales[2,2]
## [1] 8300.298
pagos_mensuales["48 m","Modelo B"]
## [1] 8300.298
pagos_mensuales[c(3,4),]
## Modelo A Modelo B Modelo C
## 60 m 5009.487 6848.217 8595.440
## 72 m 4322.528 5883.542 7351.965
pagos_mensuales[c("60 m","72 m"),]
## Modelo A Modelo B Modelo C
## 60 m 5009.487 6848.217 8595.440
## 72 m 4322.528 5883.542 7351.965
pagos_mensuales
## Modelo A Modelo B Modelo C
## 36 m 7776.555 10727.215 13588.075
## 48 m 6044.725 8300.298 10465.332
## 60 m 5009.487 6848.217 8595.440
## 72 m 4322.528 5883.542 7351.965
minimo <- min(pagos_mensuales)
posicion <- which(pagos_mensuales == minimo, arr.ind = TRUE)
posicion[1] # renglón
## [1] 4
posicion[2] # columna
## [1] 1
plazo <- rownames(pagos_mensuales)[posicion[1]]
modelo <- colnames(pagos_mensuales)[posicion[2]]
pagos_mensuales
## Modelo A Modelo B Modelo C
## 36 m 7776.555 10727.215 13588.075
## 48 m 6044.725 8300.298 10465.332
## 60 m 5009.487 6848.217 8595.440
## 72 m 4322.528 5883.542 7351.965
modelo
## [1] "Modelo A"
plazo
## [1] "72 m"
cat("El menor pago mensual es de $",
round(minimo,2),
"correspondiente al",
modelo,
"en un plazo de",
plazo,
".")
## El menor pago mensual es de $ 4322.53 correspondiente al Modelo A en un plazo de 72 m .
Las bibliotecas en R, también conocidas como libraries, contienen conjuntos de funciones enfocadas en una misión específica. Éstas, amplían la funcionalidad de R al proporcionar funciones adicionales, datos y documentación, y pueden descargarse gratuitamente desde internet. Son desarrollados por una comunidad mundial de usuarios de R.
Algunas bibliotecas vienen instaladas en R y otras hay que instalarlas manualmente.
Podemos instalar bibliotecas desde la sección miscelánea en la
pestaña de Packages en donde dice Install. Por
ejemplo, probemos con dplyr.
Otra vía, es a través de la instrucción de consola
install.packages("ggplot2").
Luego de instalar las bibliotecas hay que cargarlas.
Desde la ventana miscelánea, podemos encontrar la biblioteca y darle check.
Desde la consola, usamos la instrucción
library(dplyr).
Una vez cargada ya podemos acceder a sus funciones.
Para conocer qué funciones tiene una biblioteca podemos escribir en la consola:
dplyr::help(dplyr)?dplyrPara saber qué bibliotecas hemos cargado podemos consultar la sección
miscelánea o en la consola usar la función search( ).
# install.packages("dplyr")
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
help(dplyr)
## starting httpd help server ...
## done
?dplyr
search()
## [1] ".GlobalEnv" "package:dplyr" "package:stats"
## [4] "package:graphics" "package:grDevices" "package:utils"
## [7] "package:datasets" "package:methods" "Autoloads"
## [10] "package:base"
En R, toda la información se almacena en objetos. Dependiendo de cómo estén organizados los datos, estos objetos pueden adoptar distintas estructuras. Existen cuatro estructuras principales en R:
Continuamos con los dataframes.
Los dataframes son estructuras de datos bidimensionales en R, similares a una tabla de base de datos o una hoja de cálculo. La gran ventaja de los dataframes es que permiten almacenar columnas con diferentes tipos de datos (números, caracteres, factores, etc.), siempre y cuando cada columna contenga un único tipo de dato.
Algunas características clave de los data frames son:
Dimensiones: Los dataframes tienen filas y columnas, donde las columnas representan variables y las filas representan observaciones.
Tipos de datos: Cada columna debe contener un solo tipo de dato (numérico, texto, lógico, etc.), pero diferentes columnas pueden tener distintos tipos de datos.
Manipulación: Los dataframes permiten acceder, modificar, y operar sobre sus elementos de manera eficiente usando diversas funciones de R.
Mi primer Dataframe
En esta etapa empezamos a trabajar con datos sintéticos, es decir, datos generados artificialmente que reproducen la estructura de datos reales sin contener información sensible.
Este tipo de datos es especialmente útil en el aprendizaje de R
porque permite practicar la construcción y manipulación de objetos sin
depender de bases de datos externas. Además, facilita la
reproducibilidad de los resultados mediante set.seed(), que
fija la semilla del generador aleatorio, y el uso de
sample(), que permite seleccionar observaciones o construir
subconjuntos de forma aleatoria a partir de un conjunto de datos.
En R, este enfoque es particularmente útil cuando se exploran estructuras como los dataframes, ya que permite simular variables y observaciones de manera controlada antes de trabajar con datos reales.
Para crear un dataframe se utiliza la función
data.frame().
A continuación se muestra un ejemplo de cómo crear un dataframe con datos aleatorios de estudiantes, incluyendo nombre, sexo, edad, estado de procedencia e ingresos.
# Cargamos la biblioteca de nombres
library(babynames)
# View(babynames)
is.vector(babynames)
## [1] FALSE
is.matrix(babynames)
## [1] FALSE
is.data.frame(babynames)
## [1] TRUE
# Fijamos una semilla para controlar nuestra generación de núms aleatorios
set.seed(123)
# Generamos 20 índices de observaciones
sample(1:100, 20)
## [1] 31 79 51 14 67 42 50 43 97 25 90 69 57 9 72 26 7 95 87 36
dim(babynames)[1]
## [1] 1924665
indices <- sample(1:length(babynames$name),20,replace=FALSE)
indices
## [1] 883281 669543 1325900 944672 613997 402313 554826 1498011 1798453
## [10] 401205 1717472 377049 90077 268360 738879 815826 53241 1732761
## [19] 368917 917545
length(indices)
## [1] 20
Nota: Una semilla aleatoria es un número que fija el estado del generador de números aleatorios para que los resultados de ciertos procesos puedan reproducirse exactamente en ejecuciones posteriores.
nombre <- babynames$name[indices]
length(babynames$name)
## [1] 1924665
length(nombre)
## [1] 20
sexo <- babynames$sex[indices]
length(sexo)
## [1] 20
edad <- sample(18:25,20,replace=TRUE)
estado <- c("Ciudad de México", "Querétaro", "Puebla", "Veracruz", "Nuevo León")
estado_procedencia <- sample(estado, 20, replace = TRUE)
estado_procedencia
## [1] "Veracruz" "Nuevo León" "Nuevo León" "Puebla"
## [5] "Ciudad de México" "Veracruz" "Ciudad de México" "Ciudad de México"
## [9] "Puebla" "Veracruz" "Ciudad de México" "Puebla"
## [13] "Nuevo León" "Puebla" "Querétaro" "Nuevo León"
## [17] "Nuevo León" "Puebla" "Querétaro" "Querétaro"
ingreso <- rnorm(20, mean= 8000, sd= 1000)
ingreso
## [1] 8053.004 8922.267 10050.085 7508.969 5690.831 9005.739 7290.799
## [8] 7311.991 9025.571 7715.227 6779.282 8181.303 7861.109 8005.764
## [15] 8385.280 7629.340 8644.377 7779.513 8331.782 9096.839
df_estudiantes <- data.frame(Nombre = nombre,
Sexo = sexo,
Edad = edad,
Estado = estado_procedencia,
Ingreso = ingreso)
df_estudiantes
## Nombre Sexo Edad Estado Ingreso
## 1 Angela F 24 Veracruz 8053.004
## 2 Essie M 19 Nuevo León 8922.267
## 3 Allyn M 21 Nuevo León 10050.085
## 4 Tanita F 24 Puebla 7508.969
## 5 Sherriann F 25 Ciudad de México 5690.831
## 6 Raven M 21 Veracruz 9005.739
## 7 Glenys F 23 Ciudad de México 7290.799
## 8 Li F 23 Ciudad de México 7311.991
## 9 Miana F 20 Puebla 9025.571
## 10 Sewell M 25 Veracruz 7715.227
## 11 Wayland M 23 Ciudad de México 6779.282
## 12 Nadean F 23 Puebla 8181.303
## 13 Gregoria F 24 Nuevo León 7861.109
## 14 Sumiye F 24 Puebla 8005.764
## 15 Norvell M 25 Querétaro 8385.280
## 16 Shelle F 18 Nuevo León 7629.340
## 17 Caldonia F 23 Nuevo León 8644.377
## 18 Aivy F 19 Puebla 7779.513
## 19 Ethelmae F 18 Querétaro 8331.782
## 20 Leah M 19 Querétaro 9096.839
is.data.frame(df_estudiantes)
## [1] TRUE
View(df_estudiantes)
Agregar nuevas columnas
Una vez creado el data frame, puedes agregar más columnas como estatura, peso, etc.:
# Generamos un vector aleatorio de estaturas
estatura <- round(rnorm(20, 1.6, .15),1)
# Generamos un vector aleatorio de pesos
peso <- round(rnorm(20, 70, 20),2)
df_estudiantes1 <- data.frame(df_estudiantes,
Estatura = estatura,
Peso = peso)
df_estudiantes1
## Nombre Sexo Edad Estado Ingreso Estatura Peso
## 1 Angela F 24 Veracruz 8053.004 1.7 36.64
## 2 Essie M 19 Nuevo León 8922.267 1.6 62.40
## 3 Allyn M 21 Nuevo León 10050.085 1.8 88.38
## 4 Tanita F 24 Puebla 7508.969 1.7 58.49
## 5 Sherriann F 25 Ciudad de México 5690.831 1.7 82.16
## 6 Raven M 21 Veracruz 9005.739 1.6 37.64
## 7 Glenys F 23 Ciudad de México 7290.799 1.5 68.89
## 8 Li F 23 Ciudad de México 7311.991 1.8 80.39
## 9 Miana F 20 Puebla 9025.571 1.5 76.02
## 10 Sewell M 25 Veracruz 7715.227 1.9 72.11
## 11 Wayland M 23 Ciudad de México 6779.282 1.8 57.19
## 12 Nadean F 23 Puebla 8181.303 1.6 53.01
## 13 Gregoria F 24 Nuevo León 7861.109 1.4 49.52
## 14 Sumiye F 24 Puebla 8005.764 1.5 72.35
## 15 Norvell M 25 Querétaro 8385.280 1.6 51.05
## 16 Shelle F 18 Nuevo León 7629.340 1.6 60.19
## 17 Caldonia F 23 Nuevo León 8644.377 1.5 64.88
## 18 Aivy F 19 Puebla 7779.513 1.5 106.88
## 19 Ethelmae F 18 Querétaro 8331.782 1.6 56.96
## 20 Leah M 19 Querétaro 9096.839 1.5 74.71
carrera <- c("Actuaría", "Economía", "Matemáticas", "Administración", "Ingeniería Mecatrónica")
carrera_estudiantes <- sample(carrera, 20, replace = T, prob = c(.55,.15,.5,.5,.2))
carrera_estudiantes
## [1] "Matemáticas" "Administración" "Actuaría"
## [4] "Matemáticas" "Matemáticas" "Ingeniería Mecatrónica"
## [7] "Economía" "Ingeniería Mecatrónica" "Administración"
## [10] "Economía" "Matemáticas" "Administración"
## [13] "Matemáticas" "Matemáticas" "Actuaría"
## [16] "Matemáticas" "Ingeniería Mecatrónica" "Actuaría"
## [19] "Actuaría" "Actuaría"
df_estudiantes1$Carrera <- carrera_estudiantes
# Solo para añadir nuevas columnas en dataframes existentes
df_estudiantes1
## Nombre Sexo Edad Estado Ingreso Estatura Peso
## 1 Angela F 24 Veracruz 8053.004 1.7 36.64
## 2 Essie M 19 Nuevo León 8922.267 1.6 62.40
## 3 Allyn M 21 Nuevo León 10050.085 1.8 88.38
## 4 Tanita F 24 Puebla 7508.969 1.7 58.49
## 5 Sherriann F 25 Ciudad de México 5690.831 1.7 82.16
## 6 Raven M 21 Veracruz 9005.739 1.6 37.64
## 7 Glenys F 23 Ciudad de México 7290.799 1.5 68.89
## 8 Li F 23 Ciudad de México 7311.991 1.8 80.39
## 9 Miana F 20 Puebla 9025.571 1.5 76.02
## 10 Sewell M 25 Veracruz 7715.227 1.9 72.11
## 11 Wayland M 23 Ciudad de México 6779.282 1.8 57.19
## 12 Nadean F 23 Puebla 8181.303 1.6 53.01
## 13 Gregoria F 24 Nuevo León 7861.109 1.4 49.52
## 14 Sumiye F 24 Puebla 8005.764 1.5 72.35
## 15 Norvell M 25 Querétaro 8385.280 1.6 51.05
## 16 Shelle F 18 Nuevo León 7629.340 1.6 60.19
## 17 Caldonia F 23 Nuevo León 8644.377 1.5 64.88
## 18 Aivy F 19 Puebla 7779.513 1.5 106.88
## 19 Ethelmae F 18 Querétaro 8331.782 1.6 56.96
## 20 Leah M 19 Querétaro 9096.839 1.5 74.71
## Carrera
## 1 Matemáticas
## 2 Administración
## 3 Actuaría
## 4 Matemáticas
## 5 Matemáticas
## 6 Ingeniería Mecatrónica
## 7 Economía
## 8 Ingeniería Mecatrónica
## 9 Administración
## 10 Economía
## 11 Matemáticas
## 12 Administración
## 13 Matemáticas
## 14 Matemáticas
## 15 Actuaría
## 16 Matemáticas
## 17 Ingeniería Mecatrónica
## 18 Actuaría
## 19 Actuaría
## 20 Actuaría
Operaciones entre columnas
La función attach() nos permite tener acceso a las
columnas del data frame para poder operar entre ellas. Mientras, que la
función detach() es útil para cerrar el data frame cuando
ya no queremos tener acceso a las columnas.
babynames$name[3]
## [1] "Emma"
# name[3]
attach(babynames)
# R agrega el dataframe al "search path" (ruta de búsqueda). Esto significa que las columnas del dataframe se vuelven accesibles como si fueran variables sueltas en el entorno de trabajo.
name[3]
## [1] "Emma"
detach(babynames)
attach(df_estudiantes1)
# Calculamos el IMC de los estudiantes
imc <- round(Peso / (Estatura ^2),2)
df_estudiantes1$IMC <- imc
# Podemos generar un histograma del IMC
hist(df_estudiantes1$IMC)
?hist
# Con esta exploración y a través de la inferencia estadística, podemos hacer pruebas de bondad de ajuste y determinar a qué distribución se ajustan los datos
# Cerramos el acceso al dataframe
detach(df_estudiantes1)
Alternativamente, puedes operar directamente sobre las columnas sin usar attach() y detach():
# Generamos calificaciones para tres exámenes
set.seed(123)
calif1 <- round(runif(20, 5, 10),0)
calif2 <- round(runif(20, 5, 10),0)
calif3 <- round(runif(20, 5, 10),0)
# Añadimos las calificaciones a nuestro df
df_estudiantes1$Examen1 <- calif1
# Podemos lograr esto de una manera más rápida con índices
df_estudiantes1[ ,"Peso"]
## [1] 36.64 62.40 88.38 58.49 82.16 37.64 68.89 80.39 76.02 72.11
## [11] 57.19 53.01 49.52 72.35 51.05 60.19 64.88 106.88 56.96 74.71
df_estudiantes1[,c("Nombre","Edad")]
## Nombre Edad
## 1 Angela 24
## 2 Essie 19
## 3 Allyn 21
## 4 Tanita 24
## 5 Sherriann 25
## 6 Raven 21
## 7 Glenys 23
## 8 Li 23
## 9 Miana 20
## 10 Sewell 25
## 11 Wayland 23
## 12 Nadean 23
## 13 Gregoria 24
## 14 Sumiye 24
## 15 Norvell 25
## 16 Shelle 18
## 17 Caldonia 23
## 18 Aivy 19
## 19 Ethelmae 18
## 20 Leah 19
df_estudiantes1[,c("Examen2","Examen3")] <- cbind(calif2,calif3)
# View(df_estudiantes1)
# Otra alternativa
# df_estudiante1 <- cbind(df_estudiantes1,
# "Examen1" = calif1,
# "Examen2" = calif2,
# "Examen3" = calif3)
promedio <- round((df_estudiantes1$Examen1 + df_estudiantes1$Examen2 + df_estudiantes1$Examen3) / 3, 2)
promedio
## [1] 7.00 8.00 7.33 8.67 8.00 6.67 7.33 8.00 6.67 7.33 8.33 8.00 8.33 7.67 6.33
## [16] 7.33 7.00 6.67 7.67 7.67
df_estudiantes1$Promedio <- promedio
df_estudiantes1
## Nombre Sexo Edad Estado Ingreso Estatura Peso
## 1 Angela F 24 Veracruz 8053.004 1.7 36.64
## 2 Essie M 19 Nuevo León 8922.267 1.6 62.40
## 3 Allyn M 21 Nuevo León 10050.085 1.8 88.38
## 4 Tanita F 24 Puebla 7508.969 1.7 58.49
## 5 Sherriann F 25 Ciudad de México 5690.831 1.7 82.16
## 6 Raven M 21 Veracruz 9005.739 1.6 37.64
## 7 Glenys F 23 Ciudad de México 7290.799 1.5 68.89
## 8 Li F 23 Ciudad de México 7311.991 1.8 80.39
## 9 Miana F 20 Puebla 9025.571 1.5 76.02
## 10 Sewell M 25 Veracruz 7715.227 1.9 72.11
## 11 Wayland M 23 Ciudad de México 6779.282 1.8 57.19
## 12 Nadean F 23 Puebla 8181.303 1.6 53.01
## 13 Gregoria F 24 Nuevo León 7861.109 1.4 49.52
## 14 Sumiye F 24 Puebla 8005.764 1.5 72.35
## 15 Norvell M 25 Querétaro 8385.280 1.6 51.05
## 16 Shelle F 18 Nuevo León 7629.340 1.6 60.19
## 17 Caldonia F 23 Nuevo León 8644.377 1.5 64.88
## 18 Aivy F 19 Puebla 7779.513 1.5 106.88
## 19 Ethelmae F 18 Querétaro 8331.782 1.6 56.96
## 20 Leah M 19 Querétaro 9096.839 1.5 74.71
## Carrera IMC Examen1 Examen2 Examen3 Promedio
## 1 Matemáticas 12.68 6 9 6 7.00
## 2 Administración 24.37 9 8 7 8.00
## 3 Actuaría 27.28 7 8 7 7.33
## 4 Matemáticas 20.24 9 10 7 8.67
## 5 Matemáticas 28.43 10 8 6 8.00
## 6 Ingeniería Mecatrónica 14.70 5 9 6 6.67
## 7 Economía 30.62 8 8 6 7.33
## 8 Ingeniería Mecatrónica 24.81 9 8 7 8.00
## 9 Administración 33.79 8 6 6 6.67
## 10 Economía 19.98 7 6 9 7.33
## 11 Matemáticas 17.65 10 10 5 8.33
## 12 Administración 20.71 7 10 7 8.00
## 13 Matemáticas 25.27 8 8 9 8.33
## 14 Matemáticas 32.16 8 9 6 7.67
## 15 Actuaría 19.94 6 5 8 6.33
## 16 Matemáticas 23.51 9 7 6 7.33
## 17 Ingeniería Mecatrónica 28.84 6 9 6 7.00
## 18 Actuaría 47.50 5 6 9 6.67
## 19 Actuaría 22.25 7 7 9 7.67
## 20 Actuaría 33.20 10 6 7 7.67
Podemos exportar el dataframe a un archivo Excel usando el paquete
openxlsx:
# install.packages("openxlsx")
library(openxlsx) # Exporta dataframes como archivos de excel
openxlsx::write.xlsx(df_estudiantes1, "Base_estudiantes.xlsx")
getwd()
## [1] "C:/Users/sofip/Downloads/Curso R/Clase4"
# Nos da como resultado el directorio de trabajo actual
# El directorio de trabajo normalmente es la carpeta donde está el archivo .Rmd.
Podemos cambiar el directorio de trabajo con la función
setwd().
setwd("C:/Users/sofip/Desktop")
# Cambia el directorio de trabajo actual y lo establece en donde indiquemos
getwd()
## [1] "C:/Users/sofip/Desktop"
openxlsx::write.xlsx(df_estudiantes1, "Base_estudiantes2.xlsx")
También podemos exportar los gráficos que generamos a partir del dataframe.
png("graficos-promedio.png", width = 800, height = 600)
hist(df_estudiantes1$Promedio)
dev.off()
## png
## 2
# dev.off() es el paso que confirma y cierra la exportación del gráfico al archivo.
# Sin dev.off(), el archivo puede quedar incompleto o no guardarse correctamente, porque R no “finaliza” la escritura del gráfico.
La biblioteca dplyr es una de las más populares y
poderosas en R para la manipulación de datos. Forma parte del
tidyverse, un conjunto de paquetes diseñados para facilitar
el análisis de datos. Proporciona una gramática coherente para trabajar
con data frames, permitiendo realizar operaciones complejas de manera
concisa y legible, facilitando su aplicación.
Intalación y carga de las librerías
# install.packages(c("dplyr","readxl"))
library(dplyr)
library(readxl)
Importamos la base de datos de dulces M&M
getwd()
## [1] "C:/Users/sofip/Downloads/Curso R/Clase4"
DulcesM_M <- read_excel("DulcesM&M.xlsx")
is.data.frame(DulcesM_M)
## [1] TRUE
View(DulcesM_M)
# head devuelve las primeras filas
head(DulcesM_M)
## # A tibble: 6 × 2
## Color Peso
## <chr> <dbl>
## 1 Rojo 0.751
## 2 Naranja 0.735
## 3 Amarillo 0.883
## 4 Café 0.696
## 5 Azul 0.881
## 6 Verde 0.925
select: Selecciona columnas específicas de un data
frame. Es útil cuando queremos trabajar con una parte específica de los
datos, por ejemplo, seleccionar solo la columna de pesos de los
dulces.variable_peso <- select(DulcesM_M,2) # Genera dataframe
variable_peso
## # A tibble: 100 × 1
## Peso
## <dbl>
## 1 0.751
## 2 0.735
## 3 0.883
## 4 0.696
## 5 0.881
## 6 0.925
## 7 0.841
## 8 0.895
## 9 0.769
## 10 0.876
## # ℹ 90 more rows
variable_peso2 <- DulcesM_M$Peso # Genera vector
variable_peso2
## [1] 0.751 0.735 0.883 0.696 0.881 0.925 0.841 0.895 0.769 0.876 0.863 0.914
## [13] 0.856 0.865 0.859 0.855 0.775 0.881 0.799 0.864 0.784 0.806 0.854 0.865
## [25] 0.966 0.852 0.824 0.840 0.810 0.865 0.859 0.866 0.858 0.868 0.858 1.015
## [37] 0.857 0.859 0.848 0.859 0.818 0.876 0.942 0.838 0.851 0.982 0.868 0.809
## [49] 0.873 0.863 0.803 0.865 0.809 0.888 0.932 0.848 0.890 0.925 0.842 0.940
## [61] 0.878 0.793 0.832 0.833 0.905 0.977 0.807 0.845 0.850 0.852 0.852 0.830
## [73] 0.778 0.778 0.856 0.814 0.814 0.842 0.791 0.791 0.778 0.810 0.810 0.786
## [85] 0.881 0.881 0.853 0.818 0.864 0.864 0.873 0.825 0.880 0.855 0.882 0.942
## [97] 0.931 0.825 0.869 0.912
is.data.frame(variable_peso2)
## [1] FALSE
is.vector(variable_peso2)
## [1] TRUE
is.data.frame(variable_peso)
## [1] TRUE
filter: filtra filas según una condición lógica. Esta
función es clave cuando queremos segmentar los datos. Por ejemplo,
seleccionar solo los dulces rojos o aquellos que cumplen cierto criterio
específico.# Filtramos los dulces de color rojo
dulces_rojos <- filter(DulcesM_M, Color == "Rojo")
dulces_rojos
## # A tibble: 13 × 2
## Color Peso
## <chr> <dbl>
## 1 Rojo 0.751
## 2 Rojo 0.841
## 3 Rojo 0.856
## 4 Rojo 0.799
## 5 Rojo 0.966
## 6 Rojo 0.859
## 7 Rojo 0.857
## 8 Rojo 0.942
## 9 Rojo 0.873
## 10 Rojo 0.809
## 11 Rojo 0.89
## 12 Rojo 0.878
## 13 Rojo 0.905
# Filtramos dulces rojos con peso mayor a 0.9 gramos
dulces_rojos_pesados <- filter(DulcesM_M, Color == "Rojo",Peso > 0.9)
dulces_rojos_pesados
## # A tibble: 3 × 2
## Color Peso
## <chr> <dbl>
## 1 Rojo 0.966
## 2 Rojo 0.942
## 3 Rojo 0.905
arrange: ordena las filas del data frame. Sirve para
organizar los datos de forma ascendente o descendente, lo cual es muy
útil para informes o análisis.# Ordenar por color
dulces_ord_color <- arrange(DulcesM_M, Color)
dulces_ord_color
## # A tibble: 100 × 2
## Color Peso
## <chr> <dbl>
## 1 Amarillo 0.883
## 2 Amarillo 0.769
## 3 Amarillo 0.859
## 4 Amarillo 0.784
## 5 Amarillo 0.824
## 6 Amarillo 0.858
## 7 Amarillo 0.848
## 8 Amarillo 0.851
## 9 Azul 0.881
## 10 Azul 0.863
## # ℹ 90 more rows
# Ordenar por peso de menor a mayor
dulces_ord_peso1 <- arrange(DulcesM_M, Peso)
dulces_ord_peso1
## # A tibble: 100 × 2
## Color Peso
## <chr> <dbl>
## 1 Café 0.696
## 2 Naranja 0.735
## 3 Rojo 0.751
## 4 Amarillo 0.769
## 5 Azul 0.775
## 6 Azul 0.778
## 7 Verde 0.778
## 8 Naranja 0.778
## 9 Amarillo 0.784
## 10 Naranja 0.786
## # ℹ 90 more rows
# Ordenar por peso de mayor a menor
dulces_ord_peso2 <- arrange(DulcesM_M, desc(Peso))
dulces_ord_peso2
## # A tibble: 100 × 2
## Color Peso
## <chr> <dbl>
## 1 Verde 1.01
## 2 Café 0.982
## 3 Naranja 0.977
## 4 Rojo 0.966
## 5 Rojo 0.942
## 6 Azul 0.942
## 7 Verde 0.94
## 8 Azul 0.932
## 9 Naranja 0.931
## 10 Verde 0.925
## # ℹ 90 more rows
mutate: Crea nuevas columnas o transforma las ya
existentes. Permite modificar el data frame añadiendo nuevas columnas
basadas en cálculos o transformaciones.set.seed(123)
dulces_modificado <- mutate(DulcesM_M,
Volumen = round(rnorm(n(),mean=0.6,sd=0.1),2))
head(dulces_modificado)
## # A tibble: 6 × 3
## Color Peso Volumen
## <chr> <dbl> <dbl>
## 1 Rojo 0.751 0.54
## 2 Naranja 0.735 0.58
## 3 Amarillo 0.883 0.76
## 4 Café 0.696 0.61
## 5 Azul 0.881 0.61
## 6 Verde 0.925 0.77
count: Cuenta las ocurrencias por grupo. Ideal para ver
frecuencias de alguna variable categórica, como los colores en el
dataset.# Contamos la cantidad de dulces que hay de cada color
conteo_dulces <- count(DulcesM_M, Color)
conteo_dulces
## # A tibble: 6 × 2
## Color n
## <chr> <int>
## 1 Amarillo 8
## 2 Azul 27
## 3 Café 8
## 4 Naranja 25
## 5 Rojo 13
## 6 Verde 19
is.data.frame(conteo_dulces)
## [1] TRUE
table(DulcesM_M$Color)
##
## Amarillo Azul Café Naranja Rojo Verde
## 8 27 8 25 13 19
is.table(table(DulcesM_M$Color))
## [1] TRUE
# table es una estructura diseñada específicamente para almacenar frecuencias de valores categóricos y suele convertirse fácilmente a vector, matriz o dataframe
# con as.vector(), as.matrix(), as.dataframe()
as.matrix(table(DulcesM_M$Color))
## [,1]
## Amarillo 8
## Azul 27
## Café 8
## Naranja 25
## Rojo 13
## Verde 19
summarise: Genera resúmenes estadísticos. Permite
calcular estadísticas como medias, varianzas o sumas, etc. facilitando
el análisis de datos.resumen <- summarise(DulcesM_M,
Promedio = mean(Peso),
Varianza = var(Peso),
Desviación = sd(Peso),
Mediana = median(Peso),
Total = n())
resumen
## # A tibble: 1 × 5
## Promedio Varianza Desviación Mediana Total
## <dbl> <dbl> <dbl> <dbl> <int>
## 1 0.853 0.00273 0.0523 0.856 100
group_by: Agrupa el data frame por una o más variables.
Cuando queremos realizar análisis estadístico por grupos, como promedio
de peso por color.grupo_colores <- group_by(DulcesM_M, Color)
resumen_color <- summarise(grupo_colores,
Promedio = mean(Peso),
Varianza = var(Peso),
Desviación = sd(Peso),
Mediana = median(Peso),
Total = n())
resumen_color
## # A tibble: 6 × 6
## Color Promedio Varianza Desviación Mediana Total
## <chr> <dbl> <dbl> <dbl> <dbl> <int>
## 1 Amarillo 0.834 0.00156 0.0395 0.849 8
## 2 Azul 0.844 0.00183 0.0428 0.842 27
## 3 Café 0.848 0.00632 0.0795 0.857 8
## 4 Naranja 0.858 0.00251 0.0501 0.863 25
## 5 Rojo 0.864 0.00332 0.0576 0.859 13
## 6 Verde 0.864 0.00324 0.0570 0.865 19
%>%). El operador %>% facilita la
escritura fluida y clara de código en R, permitiendo encadenar
operaciones sin necesidad de crear variables intermedias.DulcesM_M %>%
group_by(Color) %>%
summarise(Promedio = mean(Peso),
Varianza = var(Peso),
Desviación = sd(Peso),
Mediana = median(Peso),
Total = n()) %>%
arrange(desc(Total)) %>%
print()
## # A tibble: 6 × 6
## Color Promedio Varianza Desviación Mediana Total
## <chr> <dbl> <dbl> <dbl> <dbl> <int>
## 1 Azul 0.844 0.00183 0.0428 0.842 27
## 2 Naranja 0.858 0.00251 0.0501 0.863 25
## 3 Verde 0.864 0.00324 0.0570 0.865 19
## 4 Rojo 0.864 0.00332 0.0576 0.859 13
## 5 Amarillo 0.834 0.00156 0.0395 0.849 8
## 6 Café 0.848 0.00632 0.0795 0.857 8