#install.packages("tidyverse") # Paquete para manipulación de datos
library(tidyverse)
## Warning: package 'ggplot2' was built under R version 4.3.2
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.2 ✔ tidyr 1.3.0
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
x <- 3
y <- 2
x
## [1] 3
y
## [1] 2
suma <- x + y
suma
## [1] 5
resta <- x - y
resta
## [1] 1
multiplicacion <- x*y
multiplicacion
## [1] 6
division <- x/y
division
## [1] 1.5
division_entera <- x%/% y
division_entera
## [1] 1
residuo <- x %% y
residuo
## [1] 1
potencia <- x**2
potencia
## [1] 9
potencia_2 <- x ^ 2
potencia_2
## [1] 9
raiz_cubica <- x**(1/3)
raiz_cubica
## [1] 1.44225
raiz_cuadrada <- sqrt(x)
raiz_cuadrada
## [1] 1.732051
exponencial <- exp(1)
exponencial
## [1] 2.718282
absoluto <- abs(x)
absoluto
## [1] 3
signo <- sign(x)
signo
## [1] 1
redondeo_arriba <- ceiling (x/y)
redondeo_arriba
## [1] 2
redondeo_abajo <- floor(x/y)
redondeo_abajo
## [1] 1
truncar <- trunc(x/y)
truncar
## [1] 1
pi
## [1] 3.141593
radio <- 5
area_circulo <- pi*radio**2
area_circulo
## [1] 78.53982
a <- c(1,2,3,4,5) # Secuencia de enteros 1:5
a
## [1] 1 2 3 4 5
b <- c(1,10, by = 0.5)
b
## by
## 1.0 10.0 0.5
nombres <- c("Juan","Ana","Pedro","Carla","Sara")
nombres
## [1] "Juan" "Ana" "Pedro" "Carla" "Sara"
calificaciones <- c(100,90,50,100,65)
calificaciones
## [1] 100 90 50 100 65
promedio <- mean(calificaciones)
promedio
## [1] 81
orden_ascendente <- sort(calificaciones)
orden_ascendente
## [1] 50 65 90 100 100
orden_descendente <- sort(calificaciones, decreasing = TRUE)
tabla_de_calificaciones <- data.frame(nombres,calificaciones)
tabla_de_calificaciones$estatus <- ifelse(tabla_de_calificaciones$calificaciones >= 70, "Aprobado","Reprobado")
tabla_de_calificaciones
## nombres calificaciones estatus
## 1 Juan 100 Aprobado
## 2 Ana 90 Aprobado
## 3 Pedro 50 Reprobado
## 4 Carla 100 Aprobado
## 5 Sara 65 Reprobado
summary(tabla_de_calificaciones)
## nombres calificaciones estatus
## Length:5 Min. : 50 Length:5
## Class :character 1st Qu.: 65 Class :character
## Mode :character Median : 90 Mode :character
## Mean : 81
## 3rd Qu.:100
## Max. :100
str(tabla_de_calificaciones)
## 'data.frame': 5 obs. of 3 variables:
## $ nombres : chr "Juan" "Ana" "Pedro" "Carla" ...
## $ calificaciones: num 100 90 50 100 65
## $ estatus : chr "Aprobado" "Aprobado" "Reprobado" "Aprobado" ...
head(tabla_de_calificaciones)
## nombres calificaciones estatus
## 1 Juan 100 Aprobado
## 2 Ana 90 Aprobado
## 3 Pedro 50 Reprobado
## 4 Carla 100 Aprobado
## 5 Sara 65 Reprobado
tail(tabla_de_calificaciones)
## nombres calificaciones estatus
## 1 Juan 100 Aprobado
## 2 Ana 90 Aprobado
## 3 Pedro 50 Reprobado
## 4 Carla 100 Aprobado
## 5 Sara 65 Reprobado
# Select para seleccionar columnas
resultados <- select(tabla_de_calificaciones, -c(nombres))
# Filter para filtrar renglones
resultados <- filter(resultados, estatus =="Aprobado")
alumno <- c("Yessica", "Jennifer", "Maggie", "Erika", "Marilu")
peso <- c(60,55,90,70,88)
altura <- c(1.60,1.70,1.65,1.90,1.50)
tabla_salud <- data.frame(alumno,peso,altura)
tabla_salud$IMC <- tabla_salud$peso/(tabla_salud$altura^2)
tabla_salud$resultado <- ifelse(tabla_salud$IMC <18.5,"Bajo Peso",ifelse(tabla_salud$IMC <= 24.9, "Peso normal", ifelse(tabla_salud$IMC <= 29.9, "Sobrepeso", "Obesidad")))
tabla_salud
## alumno peso altura IMC resultado
## 1 Yessica 60 1.60 23.43750 Peso normal
## 2 Jennifer 55 1.70 19.03114 Peso normal
## 3 Maggie 90 1.65 33.05785 Obesidad
## 4 Erika 70 1.90 19.39058 Peso normal
## 5 Marilu 88 1.50 39.11111 Obesidad
# Gráficas
semana <- c(1:10)
ventas <- c(150,160,165,180,190,185,175,200,210,195)
plot(semana,ventas, type= "l", main="Ventas Semanales (K USD)")
datos_ventas <- data.frame(semana, ventas)
regresion <- lm(ventas ~ semana, data=datos_ventas)
summary(regresion)
##
## Call:
## lm(formula = ventas ~ semana, data = datos_ventas)
##
## Residuals:
## Min 1Q Median 3Q Max
## -14.2727 -5.1894 -0.2273 6.7576 11.7576
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 150.667 6.301 23.912 9.97e-09 ***
## semana 5.515 1.015 5.431 0.000623 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 9.224 on 8 degrees of freedom
## Multiple R-squared: 0.7866, Adjusted R-squared: 0.76
## F-statistic: 29.5 on 1 and 8 DF, p-value: 0.0006226
datos_nuevos <- data.frame(Semana=11:20)
prediccion <- predict(regresion, datos_nuevos)
prediccion
## 1 2 3 4 5 6 7 8
## 156.1818 161.6970 167.2121 172.7273 178.2424 183.7576 189.2727 194.7879
## 9 10
## 200.3030 205.8182
R es un lenguaje de programación útil para realizar cálculos, principalmente estadísticos y forma parte de las herramientes del Big Data.
RStudio es el entorno donde se puede programar R, y gracias a que también aquí se puede programar Pyhton hace unos años se anunció que su nombre será Posit.
En esta introducción, lo qeu llama la atención es la constatnte aparición de alertas o errores en el programa, los cuales encontramos que principalmente se deben a que la versión no es la más reciente a la falta de instalación de paquetes o llamar a las librerías, problemas de escritura (typos) y los muchos argumentos que tienen las funciones.
Si desde un inicio programamos de forma estructurada, disciplinada y meticulosa, podremos preveer muchas de las alertas o errores y así obtendremos los muchos beneficios de la programación en R, como la predicción de pronósticos.