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 …
