R es un lenguaje de programación estadÃstico que surge a partir del leguaje S que fue desarrollado por el Bell Laboratory dentro de AT&T.
Por su accesibilidad, R es utilizado por numerosos investigadores y universidades lo que lo haCe un lenguaje confiable y que gracias a la comunidad cientÃfica se mantiene actualizado y vigente.
La forma en la cual interactuamos con R es por medio de una interface visual denominada R Studio. Aún cuando hay otras plataformas, R studio es quizás la más utilizada gracias a su integración con servicios en la nube como Azure y AWS
Para descargar R y RStudio pudes dar click en:
Para una introducción más profunda puedes ir a https://www.youtube.com/watch?v=lL0s1coNtRk
#R pede manejar escalares y operaciones aritmeticas basicas
#Presione Ctr+Enter para ejecutar las lineas de comando
#Este es un Numero
1
## [1] 1
#Esta es la suma de dos números
1 + 4
## [1] 5
4 - 10
## [1] -6
#Operaciones aritméticas
34 * 90 #Multiplicacion
## [1] 3060
1200 / 90.4 #Division
## [1] 13.27434
#Esta es una secuencia de numeros
1 : 200
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
## [19] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
## [37] 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
## [55] 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
## [73] 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
## [91] 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
## [109] 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
## [127] 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
## [145] 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
## [163] 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
## [181] 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198
## [199] 199 200
#R puede almacenar Numero en variables y hacer operaciones con ellas
x = 4
y = 13
x + y #Suma
## [1] 17
x - y # Resta
## [1] -9
x * y # Multiplicacion
## [1] 52
x / y # Division
## [1] 0.3076923
x ^ y #Exponenciacion
## [1] 67108864
(x + y) ^ 2 #Suma de Cuadrados
## [1] 289
(x + y) ^ x #Exponenciacion de una suma
## [1] 83521
#Podemos almacenar una operacion entre dos o mas variables en na variable y operar sobre esta variable
z = x + y - 4
z = pi * z #multiplicar por PI
print(z) #Imprimir z
## [1] 40.8407
# Tambien es posible trabajar con listas/vectores
x = c(1, 2, 3, 4)
print(x)
## [1] 1 2 3 4
#Podemos hacer operaciones 1 a 1 entre listas
y = c(5, 6, 7, 8)
x + y #suma
## [1] 6 8 10 12
x - y #Resta
## [1] -4 -4 -4 -4
x * y #Multiplicar
## [1] 5 12 21 32
x / y #Dividir
## [1] 0.2000000 0.3333333 0.4285714 0.5000000
x ^ y #Exponenciar
## [1] 1 64 2187 65536
#Para trabajar con Matrices
x = matrix(c(1:10), nrow = 2) # Esta es una matriz de 2 x 5
print(x)
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 3 5 7 9
## [2,] 2 4 6 8 10
x = matrix(c(1:10), nrow = 5) # Esta es una matriz de 5 x 2
print(x)
## [,1] [,2]
## [1,] 1 6
## [2,] 2 7
## [3,] 3 8
## [4,] 4 9
## [5,] 5 10
# Existen algunas matrices especiales como la matriz identidad, Zeros o
# NAN´s
x = diag(10) # matriz identidad de 10 x 10
print(x)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] 1 0 0 0 0 0 0 0 0 0
## [2,] 0 1 0 0 0 0 0 0 0 0
## [3,] 0 0 1 0 0 0 0 0 0 0
## [4,] 0 0 0 1 0 0 0 0 0 0
## [5,] 0 0 0 0 1 0 0 0 0 0
## [6,] 0 0 0 0 0 1 0 0 0 0
## [7,] 0 0 0 0 0 0 1 0 0 0
## [8,] 0 0 0 0 0 0 0 1 0 0
## [9,] 0 0 0 0 0 0 0 0 1 0
## [10,] 0 0 0 0 0 0 0 0 0 1
x = matrix(data = NA, nrow = 5, ncol = 3) #Matriz con elementos Nulos de 5 x 3
print(x)
## [,1] [,2] [,3]
## [1,] NA NA NA
## [2,] NA NA NA
## [3,] NA NA NA
## [4,] NA NA NA
## [5,] NA NA NA
x = matrix(data = 0, nrow = 5, ncol = 3) #MAtriz con elementos 0 de 5 x 3
print(x)
## [,1] [,2] [,3]
## [1,] 0 0 0
## [2,] 0 0 0
## [3,] 0 0 0
## [4,] 0 0 0
## [5,] 0 0 0
# Podemos definir una matriz por sus renglones y columnas
rownames = c("MX", "CO", "row3", "row4")
colnames = c("pep", "log", "col3")
x = matrix(c(3:14), nrow = 4, byrow = TRUE, dimnames = list(rownames, colnames))
print(x)
## pep log col3
## MX 3 4 5
## CO 6 7 8
## row3 9 10 11
## row4 12 13 14
#Una de las funcionalidades de R es la indexación y la indexación lógica. Cada vector o matriz dentro
#de R puede indexarse de la siguiente forma: Objeto[renglon_i, columna_j]
# Podemos acceder a uno o varios elementos de una matriz x[renglon, columna]
print(x)
## pep log col3
## MX 3 4 5
## CO 6 7 8
## row3 9 10 11
## row4 12 13 14
x[1, 2]
## [1] 4
# Podemos accesar a uno o varios elementos de una matriz x[renglon, 1 : columna_j]
x[1, 1:3]
## pep log col3
## 3 4 5
# Podemos accesar a uno o varios elementos de una matriz x[1 : renglon_i, 1 : columna_j]
x[1:2, 1:3]
## pep log col3
## MX 3 4 5
## CO 6 7 8
#La indexación logÃca toma todos los renglones y/o columnas que cumplen con una condición dada:
#Por ejemplo, queremos seleccionar todos los elementos que sean maores a 5
x > 5
## pep log col3
## MX FALSE FALSE FALSE
## CO TRUE TRUE TRUE
## row3 TRUE TRUE TRUE
## row4 TRUE TRUE TRUE
#R reconoce varios tipos de datos:
#Number
#Character
#Factor
#Logic
#Date
"a" #es de tipo String o Text tmabien puede ser tratado cono Nivel de un Factor
## [1] "a"
as.Date("2018-01-01") #Es una Fecha en formato YYYY-MM-DD
## [1] "2018-01-01"
TRUE #Es un dato Lógico
## [1] TRUE
# Una serie, lista o vector puede contener todo tipo de datos:
x = c("2018-01-01", 1, "a", FALSE, TRUE, NA, Inf)
print(x)
## [1] "2018-01-01" "1" "a" "FALSE" "TRUE"
## [6] NA "Inf"
#Podemos saber el tipo de datos de un objeto en r con str(data)
str(x)
## chr [1:7] "2018-01-01" "1" "a" "FALSE" "TRUE" NA "Inf"
#A un arreglo matricial que consta de distintos tipos de datos se le conoce como Data Frame
x = data.frame(Date = c("2018-01-01", "2018-02-01", "2018-03-01"),
Edad = c(23, 34, 45), Genero = c("M", "M", "H"))
str(x) #Función para obtener información de un Data frame
## 'data.frame': 3 obs. of 3 variables:
## $ Date : chr "2018-01-01" "2018-02-01" "2018-03-01"
## $ Edad : num 23 34 45
## $ Genero: chr "M" "M" "H"
print(x)
## Date Edad Genero
## 1 2018-01-01 23 M
## 2 2018-02-01 34 M
## 3 2018-03-01 45 H
#Un Data Frame se dice que está en formato TIDY (tidydata) si tiene observaciones en los renglones
#y variables en las columnas. Cada Dataframe tiene un indice que se refiere a la
#posición de un dato como Dataframe[Row_Name, Col_Number]
#Existen varias formas para referirse a alos elementos de un Dataframe.
#Por ejemplo, estas dos piezas de código se refieren a la misma columna:
x$Date #Hace referencia al dataframe 'x' a la columna 'Date'
## [1] "2018-01-01" "2018-02-01" "2018-03-01"
x[1, ]
x[, 1]
## [1] "2018-01-01" "2018-02-01" "2018-03-01"
x[1 : 2, 2 : 3]
x[x$Edad > 30, ]
#Vamos a usar un data frame pre cargado con el nombre de ‘mtcars’ el cual tiene varias
#caracterisitcas de distintos autos
head(mtcars) #muestra los primeros 6 renglones del data frame mtcars
tail(mtcars) #muestra los ultimos 6 renglones del data frame mtcars
nrow(mtcars) #muestra el numero de renglones del dataframe mtcars
## [1] 32
ncol(mtcars) #muestra el numero de columnas del data frame mtcars
## [1] 11
mtcars[2:5, ] #muestra los renglones 2 al 5 con todas sus columnas
mtcars[2:5, 1:3] #muestra los rengloes 2 al 5 con las columnas 1 al 3
#Tambien podemos crear nuevas columnas. Vamos a crear una columna que tenga la division entre hp/cyl.
#Para preservar el data frame original, creamos un segundo dataframe con el nombre mtcars2
mtcars2 = mtcars
#Creamos la variable Calculada hp/cyl
mtcars2$hp.cly = 2 * (mtcars2$hp / mtcars2$cyl)
mtcars2$hp.cly = mtcars2$hp.cly / pi
#Una de las cosas poderosas es la indexacion logica, la cual permite filtrar valores en un
#data frame dada una condición dependiente de alguno de los operadores lógicos de R:
#Mayor que y menor que: >=, <=
#AND: &
#OR: |
#Igual a: ==
#Distinto a: !=
x = mtcars[mtcars$cyl == 6, ] #nos quedamos con todos los renglones que tienen 6 cilindros
print(x)
## 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
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
x = mtcars[mtcars$cyl != 6, ] #nos quedamos con todos los renglones distintos de 6 cilindros
print(x)
## mpg cyl disp hp drat wt qsec vs am gear carb
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
## 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 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
## Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
## AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
## Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
x = mtcars[mtcars$cyl < 6, ] #nos quedamos con todos los renglones con menos de 6 cilindros
print(x)
## mpg cyl disp hp drat wt qsec vs am gear carb
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
## 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
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
# Todos los autos com mas de 6 cilindros Y menos de 123 hp
x = mtcars[(mtcars$cyl > 6 & mtcars$hp <= 123), ]
print(x)
## [1] mpg cyl disp hp drat wt qsec vs am gear carb
## <0 rows> (or 0-length row.names)
# Todos los autos com mas de 6 cilindros O menos de 123 hp
x = mtcars[(mtcars$cyl > 6 | mtcars$hp <= 123), ]
print(x)
## 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
## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
## Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
## AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
## Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
#Histograma
hist(mtcars$hp, #Variable a graficar
xlab = 'Caballos de Fuerza [HP]', #Titulo eje de las X´s
main = 'Histograma de HP', #Titulo del gráfico
col = 'red') #Color de relleno
#Boxplot
boxplot(mtcars$hp ~ factor(mtcars$cyl),
main = "Boxplot HP vs Cilindros",
col = "red",
xlab = "Cilindros", ylab = "HP") #Titulo del eje Y
#Scatter Plot
plot(y = mtcars$hp, x = mtcars$wt,
col = factor(mtcars$cyl), #Color del punto
main = 'HP vs WT', #Titulo
pch = 16, #Tipo de punto
cex = 2) #Tamaño del punto
#Crear un Panel con multiples graficos
par(mfrow = c(1, 2)) # number of rows, number of columns
# Histograma
hist(mtcars$hp, xlab = "Caballos de Fuerza [HP]", main = "Histograma de HP",
col = "red")
# Scatter plot
plot(y = mtcars$hp, x = mtcars$wt, col = factor(mtcars$cyl), main = "HP vs WT",
pch = 16, cex = 2)
#Matriz de Correlaciones
pairs(mtcars[, c(1, 3, 6)], col = "red", main = "Matrix Plot")
par(mfrow = c(1, 1))
plot(mtcars$drat, type = 'l')