11/11/2020

¿Qué es R?

R es un entorno y lenguaje de programación el cual proporciona una amplia variedad de técnicas estadísticas y generación de gráficos.

R está disponible como software Libre bajo los términos GNU de la Free Software Foundation en forma de código fuente. Se compila y se ejecuta en plataformas Linux, MacOs y Windows.

¿Qué es RStudio?

RStudio es un entorno de desarrollo integrado (IDE) para R. Incluye una consola, edición y ejecución directa de código, así como herramientas para gráficos, historial, depuración y gestión del espacio de trabajo.

Carpeta de trabajo

R funciona como un entorno temporal de trabajo en la memoria activa (RAM) del computador, por lo tanto cualquier análisis sólo mostrará la información resultante pero no se guarda en ninguna parte. Para contar con los análisis realizados es necesario guardarlos como objetos (vectores, matrices, listas u otros tipos de objetos).

Dado que R opera como un espacio temporal y autónomo de trabajo, también es preciso indicarle en qué parte del disco duro del computador están los archivos a utilizar, esto es, una carpeta predeterminada donde el programa buscará los archivos a ejecutar y guardará los archivos a conservar con cambios.

Existen dos alternativas para definir la carpeta de trabajo. La primera es emplear el siguiente comando:

# setwd("ruta de acceso")

Otra forma de hacerlo es mediante los botones de la parte superior; presionando el botón Session, luego Set Working Directory, y finalmente Choose Directory, que genera una pestaña para seleccionar la carpeta a utilizar.

Sintaxis en RStudio

RStudio, el usuario interactuará con el programa mediante códigos. La sintaxis es un conjunto de códigos. Su uso es bastante intuitivo y sigue un patrón lógico.

Ahora bien, para ejecutar una sintaxis se debe seleccionar con el cursor (como cuando se busca copiar un texto), el trozo de código que interesa utilizar para luego:

Operaciones matemáticas

En su forma más simple, R puede ser utilizado como una calculadora:

5 + 4 
## [1] 9
12/3 * 7^3
## [1] 1372
sqrt(144)
## [1] 12

Operaciones matemáticas básicas

Operador Operación Ejemplo Resultado
+ suma 5+4 9
- resta 5-4 1
* multiplicaición 5*4 20
/ división 5/4 1.25
^ o ** potencia 5^4 625
a %% b a módulo b 5 %% 4 1
a %/% b división entera 5 %% 2 2

Operaciones lógicas

Operador Operación Ejemplo Resultado
< ; > menor a; mayor a 10 >2 TRUE
<= ; >= menor o igual a; mayor o igual a 10 >= 10 TRUE
== exactamente igual a 5 == 10/2 TRUE
!= diferente a 6 != 12/2 FALSE
a | b a o b TRUE | TRUE TRUE
a & b a y b TRUE | FALSE FALSE

Funciones matemáticas

Operador Función Ejemplo Resultado
sin() seno sin(pi/2) 1
cos() coseno cos(0) 1
log() logaritmo natural log(1) 0
log10() logaritmo en base 10 log10(100) 2
sqrt() raíz cuadrada sqrt(144) 12
abs() valor absoluto abs(-5) 5
exp() exponencial exp(1) 2.718282

Operadores de asignación

Operador Operación
<- asigna valor a una variable
= asigna valor a una variable

Asignación de variables

x <-24

x # imprime el resultado
## [1] 24

El nombre de una variable no puede contener espacios ni caracteres especiales.

# mi variable <- 100 genera error

mi_variable <-100

mi_variable
## [1] 100

Operaciones con variables

velocidad_inicial <- 110
velocidad_final <- 185
tiempo_inicial <- 0
tiempo_final <- 15

variacion_velocidad <- velocidad_final - velocidad_inicial
variacion_tiempo <- tiempo_final - tiempo_inicial

variacion_velocidad / variacion_tiempo
## [1] 5

Ejercicio 1

De los siguientes ejemplos, ¿Cuáles son nombres de variables válidas en R?

  • min_height
  • max.height
  • _age
  • .mass
  • MaxLength
  • min-length
  • 2widths
  • celsius2kelvin

Ejercicio 2

¿Cuál será el valor de cada variable después de cada comando en el siguiente código?

 x <- 40
 y <- 2
 x <- x * 2 
 y <- (12 - y)^y

Escribe un comando para comparar la variable x con y.

Buscando ayuda en R

# ?function_name
# help(function_name)

# ?"<-" Ejemplo

Estructuras de datos

Dimensiones Homogeneas Heterogeneas
1 Vector Lista
2 Matriz Data frame
n Array

Veamos las características de cada una de ellas.

Vectores

# vector numérico
x <-c(1,2,3,4.25) # función "c()", que significa concatenar combinar.
x
## [1] 1.00 2.00 3.00 4.25
z <-c(x,5,x)

z
## [1] 1.00 2.00 3.00 4.25 5.00 1.00 2.00 3.00 4.25

Algunas operaciones con vectores

Cuando indicamos a R que calcul, por ejemplo \(x * 2 + 100\), lo que realmente calcula es:

x*2+100
## [1] 102.0 104.0 106.0 108.5
x*c(2,2,2,2)+c(100,100,100,100)
## [1] 102.0 104.0 106.0 108.5

Se conoce como “reciclaje”

c(1, 2, 3, 4) + c(0, 10)
## [1]  1 12  3 14

Secuencias numéricas

1:10
##  [1]  1  2  3  4  5  6  7  8  9 10
pi:10
## [1] 3.141593 4.141593 5.141593 6.141593 7.141593 8.141593 9.141593
15:1
##  [1] 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1

“a:b” es una secuencia de valores de salto 1.

Más secuencias numéricas

seq(1:10)
##  [1]  1  2  3  4  5  6  7  8  9 10
seq(0,10,by=0.5)
##  [1]  0.0  0.5  1.0  1.5  2.0  2.5  3.0  3.5  4.0  4.5  5.0  5.5  6.0  6.5  7.0
## [16]  7.5  8.0  8.5  9.0  9.5 10.0
secuencia <-seq(100,200,length=21)
secuencia
##  [1] 100 105 110 115 120 125 130 135 140 145 150 155 160 165 170 175 180 185 190
## [20] 195 200

Clases o tipos de datos

#Vector alfanumérico 
palabras <- c("Colombia", "gana", "el")
palabras
## [1] "Colombia" "gana"     "el"
mensaje <-c(palabras, "mundial")
paste(mensaje,collapse = " ")
## [1] "Colombia gana el mundial"

Ejercicio 3

¿Qué tipo de vector crees que crearás si corres lo siguiente?:

x <- c(1, 2, 3)
y <- c('d', 'e', 'f')
z <- c(1, 2, 'f')

Ejercicio 4

Busca en la ayuda de la función “paste”. ¿Cuál es la diferencia entre los argumentos “sep” y “collapse”?

Escribe un ejemplo de cada argumento.

Cargar y guardar una base de datos

Sexo    <- c(0,0,1,1,0,1,1,1,0,0)
Ingreso <- c(10000,30000,25000,12000,15000,25000,24000,12000,10000,5500)
Acuerdo <- c(1,5,3,2,4,5,5,2,2,1)

# creación de una base de datos
Empresa <- cbind(Sexo,Ingreso,Acuerdo) #unir por columna
Empresa
##       Sexo Ingreso Acuerdo
##  [1,]    0   10000       1
##  [2,]    0   30000       5
##  [3,]    1   25000       3
##  [4,]    1   12000       2
##  [5,]    0   15000       4
##  [6,]    1   25000       5
##  [7,]    1   24000       5
##  [8,]    1   12000       2
##  [9,]    0   10000       2
## [10,]    0    5500       1

View(Empresa)
save(Empresa, file = "Tabla.RData")

Limpiar el entorno de trabajo

Este archivo esta almacenado como archivo de formato R en el disco duro, específicamente en la carpeta de trabajo. Este archivo puede usarse para posteriores análisis o puede ser enviado a otras personas.

El entorno de trabajo se irá llenando paulatinamente con objetos que quizás ya no se necesiten y sólo pueden confundir en los pasos posteriores del análisis.

#Comando para eliminar elementos especificos, aquí se elimina 
#la base creada.
remove(Empresa) 

#Comando para limpiar todos los objetos del entorno de trabajo.
rm(list = ls()) 

Matrices

Son datos “rectangulares”, lo que significa que se usan para almacenar datos tabulares, con filas y columnas.

La principal característica, es que las matrices solo pueden contener una única clase de datos, al igual que los vectores.

matriz <- matrix(1:20,nrow=4,ncol=5)
matriz
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    5    9   13   17
## [2,]    2    6   10   14   18
## [3,]    3    7   11   15   19
## [4,]    4    8   12   16   20
dim(matriz)
## [1] 4 5

vector <- seq(410,500,length=10)
length(vector)
## [1] 10
dim(vector)  <- c(5,2)
vector
##      [,1] [,2]
## [1,]  410  460
## [2,]  420  470
## [3,]  430  480
## [4,]  440  490
## [5,]  450  500
class(vector)
## [1] "matrix"

Ejercicio 5

Construye un vector con los números del 1 al 26. Multiplica el vector por 4 y asigna al vector resultante, los nombres de A hasta Z (Pista: hay un vector pre-definido llamado LETTERS)

Ejercicio 6

Construye otra matriz, con los números 1:50, con 5 columnas y 10 renglones. ¿Cómo llenó la función matrix de manera predeterminada la matriz, por columna o por renglón? Investiga como cambiar este comportamento. (Sugerencia: lee la ayuda de la función matrix.)

Pequeño descanso…

Olvide comentarles que soy “Mago matemático”. Y en este momento les hare un truco de magia a todos los presentes.

El truco de magia se llama “advina cumpleaños”. Por favor ingresen a la siguiente liga, donde se encuentra publicada una pequeña aplicación del truco.

https://jairoayala.shinyapps.io/Adivina_cumple/

Data Frames

colores <- c("rojo","azul","verde","blanco","naranja")
df      <- data.frame(colores,vector)
df
##   colores  X1  X2
## 1    rojo 410 460
## 2    azul 420 470
## 3   verde 430 480
## 4  blanco 440 490
## 5 naranja 450 500
class(df)
## [1] "data.frame"

colnames(df) <- c("Colores","Altura","Peso")
rownames(df) <- c("E1","E2","E3","E4","E5")
df
##    Colores Altura Peso
## E1    rojo    410  460
## E2    azul    420  470
## E3   verde    430  480
## E4  blanco    440  490
## E5 naranja    450  500

Ejercicio 7

Construye un data frame llamado “gatos” con la siguiente información:

# color,peso,le_gusta_cuerda
# mixto,2.1,1
# negro,5.0,0
# atigrado,3.2,1
# café, 3.4,1
  • Aumenta el peso de los gatos en 2 unidades.

  • Con ayuda de la función “paste” crea una oración sobre el color de cada gato.

  • Convierte la entrada numérica de la columna “le_gusta_cuerda” en palabras: 1: le gusta y 0: no le gsta.

Listas en R

Otra estructura de datos que querrás en tu bolsa de trucos es list(). Una lista es más simple en algunos aspectos que los otros tipos, porque puedes poner cualquier cosa que tú quieras en ella:

lista <- list(1, "a", TRUE, 1+4i)
lista
## [[1]]
## [1] 1
## 
## [[2]]
## [1] "a"
## 
## [[3]]
## [1] TRUE
## 
## [[4]]
## [1] 1+4i

otra_lista <- list(title = "Numeros", numberos = 1:10, data = TRUE )
otra_lista
## $title
## [1] "Numeros"
## 
## $numberos
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## $data
## [1] TRUE

lista_listas <-list(list("a","b","c"),c("a","b","c"),"Hola mundo")
lista_listas
## [[1]]
## [[1]][[1]]
## [1] "a"
## 
## [[1]][[2]]
## [1] "b"
## 
## [[1]][[3]]
## [1] "c"
## 
## 
## [[2]]
## [1] "a" "b" "c"
## 
## [[3]]
## [1] "Hola mundo"

lista_tablas <- list(matrix(1:10,2,5),matrix(201:220,4,5,byrow = T))
lista_tablas
## [[1]]
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    3    5    7    9
## [2,]    2    4    6    8   10
## 
## [[2]]
##      [,1] [,2] [,3] [,4] [,5]
## [1,]  201  202  203  204  205
## [2,]  206  207  208  209  210
## [3,]  211  212  213  214  215
## [4,]  216  217  218  219  220

Ejercicio 8

Crea una lista de longitud dos que contenga un vector de los diferentes tipos de datos y la otra con las diferentes estructuras de datos que hemos visto.

Ejercicio 9

Considera la salida de R para la siguiente matriz:

##      [,1] [,2]
## [1,]    4    5
## [2,]    1   10
## [3,]    9    7

¿Cuál fué el comando correcto para escribir esta matriz?

  • matrix(c(4, 1, 9, 5, 10, 7), nrow = 3)
  • matrix(c(4, 9, 10, 1, 5, 7), ncol = 2, byrow = TRUE)
  • matrix(c(4, 9, 10, 1, 5, 7), nrow = 2)
  • matrix(c(4, 1, 9, 5, 10, 7), ncol = 2, byrow = TRUE)

Conjuntos de datos en R

Varios conjuntos de datos se icluyen en la instalación de R (en el paquete “datasets”) y por defecto se ecuentran cargados para su uso. la funcion data() lista todos los data sets de R.

str(iris)
## 'data.frame':    150 obs. of  5 variables:
##  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
##  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
##  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
##  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

Información en una columna del data frame (filtrar por columna)

# iris$Species

# data[__,XXX]  filtro por columna
# iris[,"Species"] 
 iris[,5]
##   [1] setosa     setosa     setosa     setosa     setosa     setosa    
##   [7] setosa     setosa     setosa     setosa     setosa     setosa    
##  [13] setosa     setosa     setosa     setosa     setosa     setosa    
##  [19] setosa     setosa     setosa     setosa     setosa     setosa    
##  [25] setosa     setosa     setosa     setosa     setosa     setosa    
##  [31] setosa     setosa     setosa     setosa     setosa     setosa    
##  [37] setosa     setosa     setosa     setosa     setosa     setosa    
##  [43] setosa     setosa     setosa     setosa     setosa     setosa    
##  [49] setosa     setosa     versicolor versicolor versicolor versicolor
##  [55] versicolor versicolor versicolor versicolor versicolor versicolor
##  [61] versicolor versicolor versicolor versicolor versicolor versicolor
##  [67] versicolor versicolor versicolor versicolor versicolor versicolor
##  [73] versicolor versicolor versicolor versicolor versicolor versicolor
##  [79] versicolor versicolor versicolor versicolor versicolor versicolor
##  [85] versicolor versicolor versicolor versicolor versicolor versicolor
##  [91] versicolor versicolor versicolor versicolor versicolor versicolor
##  [97] versicolor versicolor versicolor versicolor virginica  virginica 
## [103] virginica  virginica  virginica  virginica  virginica  virginica 
## [109] virginica  virginica  virginica  virginica  virginica  virginica 
## [115] virginica  virginica  virginica  virginica  virginica  virginica 
## [121] virginica  virginica  virginica  virginica  virginica  virginica 
## [127] virginica  virginica  virginica  virginica  virginica  virginica 
## [133] virginica  virginica  virginica  virginica  virginica  virginica 
## [139] virginica  virginica  virginica  virginica  virginica  virginica 
## [145] virginica  virginica  virginica  virginica  virginica  virginica 
## Levels: setosa versicolor virginica

Filtrar por fila

# data[XXX,__]  filtro por fila
iris[iris$Species=="versicolor",]
##     Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
## 51           7.0         3.2          4.7         1.4 versicolor
## 52           6.4         3.2          4.5         1.5 versicolor
## 53           6.9         3.1          4.9         1.5 versicolor
## 54           5.5         2.3          4.0         1.3 versicolor
## 55           6.5         2.8          4.6         1.5 versicolor
## 56           5.7         2.8          4.5         1.3 versicolor
## 57           6.3         3.3          4.7         1.6 versicolor
## 58           4.9         2.4          3.3         1.0 versicolor
## 59           6.6         2.9          4.6         1.3 versicolor
## 60           5.2         2.7          3.9         1.4 versicolor
## 61           5.0         2.0          3.5         1.0 versicolor
## 62           5.9         3.0          4.2         1.5 versicolor
## 63           6.0         2.2          4.0         1.0 versicolor
## 64           6.1         2.9          4.7         1.4 versicolor
## 65           5.6         2.9          3.6         1.3 versicolor
## 66           6.7         3.1          4.4         1.4 versicolor
## 67           5.6         3.0          4.5         1.5 versicolor
## 68           5.8         2.7          4.1         1.0 versicolor
## 69           6.2         2.2          4.5         1.5 versicolor
## 70           5.6         2.5          3.9         1.1 versicolor
## 71           5.9         3.2          4.8         1.8 versicolor
## 72           6.1         2.8          4.0         1.3 versicolor
## 73           6.3         2.5          4.9         1.5 versicolor
## 74           6.1         2.8          4.7         1.2 versicolor
## 75           6.4         2.9          4.3         1.3 versicolor
## 76           6.6         3.0          4.4         1.4 versicolor
## 77           6.8         2.8          4.8         1.4 versicolor
## 78           6.7         3.0          5.0         1.7 versicolor
## 79           6.0         2.9          4.5         1.5 versicolor
## 80           5.7         2.6          3.5         1.0 versicolor
## 81           5.5         2.4          3.8         1.1 versicolor
## 82           5.5         2.4          3.7         1.0 versicolor
## 83           5.8         2.7          3.9         1.2 versicolor
## 84           6.0         2.7          5.1         1.6 versicolor
## 85           5.4         3.0          4.5         1.5 versicolor
## 86           6.0         3.4          4.5         1.6 versicolor
## 87           6.7         3.1          4.7         1.5 versicolor
## 88           6.3         2.3          4.4         1.3 versicolor
## 89           5.6         3.0          4.1         1.3 versicolor
## 90           5.5         2.5          4.0         1.3 versicolor
## 91           5.5         2.6          4.4         1.2 versicolor
## 92           6.1         3.0          4.6         1.4 versicolor
## 93           5.8         2.6          4.0         1.2 versicolor
## 94           5.0         2.3          3.3         1.0 versicolor
## 95           5.6         2.7          4.2         1.3 versicolor
## 96           5.7         3.0          4.2         1.2 versicolor
## 97           5.7         2.9          4.2         1.3 versicolor
## 98           6.2         2.9          4.3         1.3 versicolor
## 99           5.1         2.5          3.0         1.1 versicolor
## 100          5.7         2.8          4.1         1.3 versicolor

Filtrar con funciones lógicas

Por ejemplo, queremos las observaciones donde el ancho del sépalo sea mayor a 4 y la especie sea “virginica”.

iris[iris[,"Petal.Length"]>6 & iris[,"Species"]=="virginica", ]
##     Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
## 106          7.6         3.0          6.6         2.1 virginica
## 108          7.3         2.9          6.3         1.8 virginica
## 110          7.2         3.6          6.1         2.5 virginica
## 118          7.7         3.8          6.7         2.2 virginica
## 119          7.7         2.6          6.9         2.3 virginica
## 123          7.7         2.8          6.7         2.0 virginica
## 131          7.4         2.8          6.1         1.9 virginica
## 132          7.9         3.8          6.4         2.0 virginica
## 136          7.7         3.0          6.1         2.3 virginica

Subsetting

La función “subset” nos facilita el recuperar datos cuando queremos que se cumplan ciertas condiciones.

iris[iris[,"Sepal.Width"]<=3 & iris[,"Species"]=="setosa", ]
##    Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 2           4.9         3.0          1.4         0.2  setosa
## 9           4.4         2.9          1.4         0.2  setosa
## 13          4.8         3.0          1.4         0.1  setosa
## 14          4.3         3.0          1.1         0.1  setosa
## 26          5.0         3.0          1.6         0.2  setosa
## 39          4.4         3.0          1.3         0.2  setosa
## 42          4.5         2.3          1.3         0.3  setosa
## 46          4.8         3.0          1.4         0.3  setosa

Nos vemos mañana …