Introducción a Rstudio

DieGoD

R y Rstudio

R

R es un lenguaje de programación y un entorno de software para análisis estadístico, visualización gráfica y modelado. Es de código abierto. R es muy popular entre los estadísticos, los científicos de datos y los investigadores debido a su flexibilidad, su amplio conjunto de paquetes y su fuerte capacidad para la manipulación de datos.

Rstudio

RStudio, por otro lado, es un entorno de desarrollo integrado (IDE, por sus siglas en inglés) para el lenguaje de programación R. Proporciona una interfaz de usuario que facilita la escritura y la ejecución de código R.

Rstudio

Entorno de Rstudio

Tipos de archivos que lee Rstudio

Tipos de archivos que se pueden leer en Rstudio

  • Excel
library(readxl)
excel_file <- read_excel("excel_file.xlsx") ;excel_file
# A tibble: 6 × 3
  `col 1`  col2  col3
    <dbl> <dbl> <dbl>
1       3     5     1
2       5     2     2
3       2     3     5
4       5     2     5
5       5     2     5
6       5     4     2
  • CSV - TXT
library(readr)
csv_file <- read_csv("csv_file.csv") ;csv_file
# A tibble: 3 × 4
  `col 1`  col2  col3  col4
    <dbl> <dbl> <dbl> <dbl>
1       2     5     3     2
2       3     4     2     4
3       2     5     4     1
  • Enlaces Web
file_web <- read.csv('https://raw.githubusercontent.com/Di3God/files_csv/55/data1.csv')
head(file_web ,3)
     y  x1  x2  x3   x4   x5 x6 x7    x8   x9  x10 x11
1 18.9 350 165 260 8.00 2.56  4  3 200.3 69.9 3910   1
2 17.0 350 170 275 8.50 2.56  4  3 199.6 72.9 3860   1
3 20.0 250 105 185 8.25 2.73  1  3 196.7 72.2 3510   1
  • Archivo STATA
library(haven)
enaho <- read_dta("enaho01-2022-100.dta") ;head(enaho[,1:4],3)
# A tibble: 3 × 4
  aÑo   mes   conglome vivienda
  <chr> <chr> <chr>    <chr>   
1 2022  01    005030   008     
2 2022  01    005030   017     
3 2022  01    005030   020     
  • Archivo SPSS
spss_file <- read_sav("spss_file.sav") ;spss_file
# A tibble: 3 × 3
   col1  col2  col3
  <dbl> <dbl> <dbl>
1     4     3     1
2     3     2     1
3     2     4     5

Otros tipos de archivos que tambien se pueden leer

  • Archivos SQL

  • Archivos JSON

  • Archivos XML y HTML

  • Archivos SAS

  • Archivos de datos geoespaciales

  • Archivos de MATLAB

Paquetes para tratamiento de datos

  • readr: Este paquete facilita la lectura de datos tabulares rectangulares, como los almacenados en .csv, .tsv, o .fwf.

  • tidyverse: Un conjunto de paquetes para tratamiendo de datos. Incluye paquetes como ggplot2 para visualización de datos.

  • dplyr: Uno de los paquetes más utilizados para la manipulación de datos. Proporciona un conjunto coherente de verbos para ayudar a resolver los problemas más comunes de manipulación de datos.

  • tidyr: Ofrece un conjunto de funciones que ayudan a reorganizar la disposición de los datos.

  • lubridate: Es útil para tratar con fechas y tiempos.

Primeros pasos en Rstudio

Operaciones elementales

##Tema 1: Operadores elementales
a <- 3 
b <- 4
suma <- a+b ;paste('la suma es :',suma)
[1] "la suma es : 7"
diferencia <- a-b ;paste('la diferencia es :',diferencia)
[1] "la diferencia es : -1"
multiplicacion <- a*b ;paste('la multiplicacion es :',multiplicacion)
[1] "la multiplicacion es : 12"
cociente <- a/b ;paste('el cociente es :',cociente)
[1] "el cociente es : 0.75"
residuo <- b%%a ;paste('el residuo es :',residuo)
[1] "el residuo es : 1"
# Asignación múltiple
v1 <- v2 <- v3 <- 100

Tipos de datos

#numérico
x <- -100
class(x)
[1] "numeric"
#Integer
x <- 100L
class(x)
[1] "integer"
#Complejo
x <- 9i + 3
class(x)
[1] "complex"
#Character o string
x <- "Una clase acerca R"
class(x)
[1] "character"
#Logical
x <- FALSE
class(x)
[1] "logical"
#Bonus: valor absoluto
va <- abs(diferencia)
va
[1] 1

Vectores , Listas , Matrices y Arrays

####Vectores: ingestados mediante la función c()
compra0 <- c(1.20 ,140.20) ; class(compra0)
[1] "numeric"
compra1 <- c(135.20,"0001",140.20) ; class(compra1)
[1] "character"
compra2 <- c("002",1045.00,1320.00) ;class(compra2)
[1] "character"
#Vectores generados
vec_gen <- 1:10 ; vec_gen
 [1]  1  2  3  4  5  6  7  8  9 10
#Ordenamiento de vectores
venta1 <- c(150,130,140)
venta1_sorted <- sort(venta1) ;venta1_sorted
[1] 130 140 150
##La ingesta de listas se hace mediante list()
clientes <- list("field1","BCP","Backus","Entel") ;clientes
[[1]]
[1] "field1"

[[2]]
[1] "BCP"

[[3]]
[1] "Backus"

[[4]]
[1] "Entel"
categorias_clientes <-  list("premium","standard","basic") 
cat_id_premium <- list("1","2","3")

Ejercicios para prácticar

#Ejercicio
#nombre y edad y mostrar los valores
nombre = readline(prompt="Ingrese su nombre: ")
Ingrese su nombre: 
print(paste("Mi nombre es ", nombre))
[1] "Mi nombre es  "
#Total de seguidores
total <- 100+120+250
print(paste("El total de seguidores:", total))
[1] "El total de seguidores: 470"
#Los 10 primeros números de la serie de Fibonacci
Fibo <-  numeric(10)
Fibo[1] <- Fibo[2] <- 1 
for(i in 3:10) Fibo[i] <- Fibo[i-2] + Fibo[i-1] 
Fibo
 [1]  1  1  2  3  5  8 13 21 34 55
#Jalar todos los elementos de una lista exceptuando el primer elemento
clientes <- list("field1","BCP","Backus","Entel") 
categorias_clientes <-  list("premium","standard","basic") 
clientes[c(-1)]
[[1]]
[1] "BCP"

[[2]]
[1] "Backus"

[[3]]
[1] "Entel"
#Cambiar un elemento de la lista
clientes[4] <- "Telefónica" ;clientes
[[1]]
[1] "field1"

[[2]]
[1] "BCP"

[[3]]
[1] "Backus"

[[4]]
[1] "Telefónica"
#Confirmar si el elemento esta o no en la lista
"premium" %in% categorias_clientes
[1] TRUE
"Entel" %in% clientes
[1] FALSE
#Insertar un elemento a la lista en una determinada posición
clientes <- append(clientes,"BBVA", after=2) ;clientes
[[1]]
[1] "field1"

[[2]]
[1] "BCP"

[[3]]
[1] "BBVA"

[[4]]
[1] "Backus"

[[5]]
[1] "Telefónica"
#Remover el primer item de la lista
clientes <- clientes[-1]
#Eliminar primer elemento de la lista
#clientes <- clientes[c(-1)]
#Imprima todos los valores de una lista
for (x in clientes){
  print(x)
}
[1] "BCP"
[1] "BBVA"
[1] "Backus"
[1] "Telefónica"
#Unión de dos listas
clientes2 <- list("Luz del Sur","Enel","Sedapal")
lista_unida <-c(clientes,clientes2) ;lista_unida
[[1]]
[1] "BCP"

[[2]]
[1] "BBVA"

[[3]]
[1] "Backus"

[[4]]
[1] "Telefónica"

[[5]]
[1] "Luz del Sur"

[[6]]
[1] "Enel"

[[7]]
[1] "Sedapal"
ab <- c(1,2,3,4,5,6) ;ab
[1] 1 2 3 4 5 6
matrix <- matrix(c(1,2,3,4,5,6), nrow = 3, ncol = 2) ;matrix
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
#Asignamos los valores a una matriz
matrix <- matrix(lista_unida, nrow = 4, ncol = 2)

#Buscamos un elemeto específico dentro de la matriz
matrix
     [,1]         [,2]         
[1,] "BCP"        "Luz del Sur"
[2,] "BBVA"       "Enel"       
[3,] "Backus"     "Sedapal"    
[4,] "Telefónica" "BCP"        
matrix[3,2]
[[1]]
[1] "Sedapal"
array <- c(1:24)
multiarray <- array(array, dim = c(4, 3, 2)) ;multiarray
, , 1

     [,1] [,2] [,3]
[1,]    1    5    9
[2,]    2    6   10
[3,]    3    7   11
[4,]    4    8   12

, , 2

     [,1] [,2] [,3]
[1,]   13   17   21
[2,]   14   18   22
[3,]   15   19   23
[4,]   16   20   24

DataFrame

Data_Frame <- data.frame (
  Training = c("Strength", "Stamina", "Other"),
  Pulse = c(100, 150, 120),
  Duration = c(60, 30, 45)
)
#summary
summary(Data_Frame)
   Training             Pulse          Duration   
 Length:3           Min.   :100.0   Min.   :30.0  
 Class :character   1st Qu.:110.0   1st Qu.:37.5  
 Mode  :character   Median :120.0   Median :45.0  
                    Mean   :123.3   Mean   :45.0  
                    3rd Qu.:135.0   3rd Qu.:52.5  
                    Max.   :150.0   Max.   :60.0  
#Acceder a una determinada columna del data frame
Data_Frame$Training
[1] "Strength" "Stamina"  "Other"   
Data_Frame$Pulse
[1] 100 150 120
Data_Frame$Duration
[1] 60 30 45
Data_Frame[["Training"]]
[1] "Strength" "Stamina"  "Other"   

Gráficos básicos en R

plot(1, 3)

plot(0,0)

plot(c(1,8),c(3,10))

x <- c(1, 2, 3, 4, 5)
y <- c(3, 7, 8, 9, 12)
plot(x,y)

plot(1:10)

plot(1:10, type="l")

#Nombres de los ejes
plot(1:10, main="Gráfico inicial", xlab="Ingresos", ylab="Pérdidas")

#Color de la gráfica
plot(1:10, col="red" , type = 'l')

#Tamaño de los puntos
plot(1:10, cex=2)

plot(x,y, cex=10, col="blue")

#Forma de los puntos
plot(x,y, cex=4, col="blue",pch=10)

#Comparando dos líneas
line1 <- c(1,2,3,4,5,10)
line2 <- c(2,5,7,8,9,10)

plot(x,y, type = "l", col = "blue")
lines(x,x, type="l", col = "red")

#Scatterplots
#Día 1: edad y velocidad de 12 carros
edad <- c(5,7,8,7,2,2,9,4,11,12,9,6)
velocidad <- c(99,86,87,88,111,103,87,94,78,77,85,86)

#Día 2: edad y velocidad de 12 carros
edad2 <- c(2,2,8,1,15,8,12,9,7,3,11,4,7,14,12)
velocidad2 <- c(100,105,84,105,90,99,90,95,94,100,79,112,91,80,85)

plot(edad,velocidad, main="Carros", xlab="Edad de los carros", ylab="Velocidad de los carros", col="red", cex=5)
points(edad2,velocidad2, col="blue", cex=5)

Datasets

Data_Cars <- mtcars
head(Data_Cars,10)
                   mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Duster 360        14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
Merc 240D         24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Merc 230          22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
Merc 280          19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
summary(Data_Cars)
      mpg             cyl             disp             hp       
 Min.   :10.40   Min.   :4.000   Min.   : 71.1   Min.   : 52.0  
 1st Qu.:15.43   1st Qu.:4.000   1st Qu.:120.8   1st Qu.: 96.5  
 Median :19.20   Median :6.000   Median :196.3   Median :123.0  
 Mean   :20.09   Mean   :6.188   Mean   :230.7   Mean   :146.7  
 3rd Qu.:22.80   3rd Qu.:8.000   3rd Qu.:326.0   3rd Qu.:180.0  
 Max.   :33.90   Max.   :8.000   Max.   :472.0   Max.   :335.0  
      drat             wt             qsec             vs        
 Min.   :2.760   Min.   :1.513   Min.   :14.50   Min.   :0.0000  
 1st Qu.:3.080   1st Qu.:2.581   1st Qu.:16.89   1st Qu.:0.0000  
 Median :3.695   Median :3.325   Median :17.71   Median :0.0000  
 Mean   :3.597   Mean   :3.217   Mean   :17.85   Mean   :0.4375  
 3rd Qu.:3.920   3rd Qu.:3.610   3rd Qu.:18.90   3rd Qu.:1.0000  
 Max.   :4.930   Max.   :5.424   Max.   :22.90   Max.   :1.0000  
       am              gear            carb      
 Min.   :0.0000   Min.   :3.000   Min.   :1.000  
 1st Qu.:0.0000   1st Qu.:3.000   1st Qu.:2.000  
 Median :0.0000   Median :4.000   Median :2.000  
 Mean   :0.4062   Mean   :3.688   Mean   :2.812  
 3rd Qu.:1.0000   3rd Qu.:4.000   3rd Qu.:4.000  
 Max.   :1.0000   Max.   :5.000   Max.   :8.000  

Gráficos avanzados con ggplot2

library(ggplot2)
ggplot(mtcars, aes(x=mpg)) + 
  geom_histogram(color="black", fill="white", binwidth = 2) +
  labs(x="Millas por galón", y="Conteo", title="Histograma de millas por galón")

ggplot(mtcars, aes(y=mpg)) + 
  geom_boxplot(fill="white", color="black") +
  labs(y="Millas por galón", title="Boxplot de millas por galón")

ggplot(mtcars, aes(x=wt, y=mpg)) + 
  geom_point() +
  labs(x="Peso del coche", y="Millas por galón", title="Diagrama de dispersión de mpg vs wt")

ggplot(mtcars, aes(x=factor(am))) + 
  geom_bar(fill="lightblue", color="black") +
  labs(x="Tipo de transmisión", y="Conteo", title="Diagrama de barras de la transmisión del coche")

ggplot(mtcars, aes(x=mpg)) + 
  geom_density(fill="lightblue") +
  labs(x="Millas por galón", title="Diagrama de densidad de las millas por galón")

ggplot(mtcars, aes(x=wt, y=mpg)) + 
  geom_line(color="blue") +
  labs(x="Peso del coche", y="Millas por galón", title="Gráfico de línea de mpg en función del peso del coche")