Fundamentos del Lenguaje R y RStudio
Fundamentos del Lenguaje R y RStudio
I. Introducción y objetivos
V. Estructura de datos
VII. Funciones
VIII. Resumen
XI. Glosario
XII. Bibliografía
Lección 1 de 12
I. Introducción y objetivos
Dentro de las herramientas que puede encontrar un científico de datos para realizar proyectos o,
simplemente, investigar sobre toda la información que podemos extraer de un conjunto de datos, tarde o
temprano se encontrará con R.
En la actualidad, además de mantener su rivalidad con Python
dentro del mundo de la ciencia de datos, es considerado uno de los
mejores lenguajes de programación en lo que a modelado y
aprendizaje estadístico se refiere.
Especialmente, podremos usar su enorme cantidad de paquetes para realizar análisis exploratorio sobre
datasets.
Se introducirá al alumno sobre este lenguaje, primero mediante una breve visión
sobre qué es R, instalación de R y RStudio, la creación de scripts y notebooks, y
después el aprendizaje de los fundamentos de R, la utilización e instalación de
paquetes para realizar transformación y limpieza de datos y, finalmente, se trabajará
con las librerías más populares que existen en R para la visualización de datos, como
son los gráficos base, Ggplot2 y Plotly.
C O NT I NU A R
1.2. Objetivos de la unidad
Tras finalizar esta unidad, el alumno conocerá los siguientes conceptos y habrá adquirido las competencias
mencionadas a continuación:
3 Distinguir y saber utilizar las siguientes estructuras de datos en R: vectores, arrays, factores,
listas, matrices y dataframes.
5 Desarrollar funciones propias y diferenciar parámetros de entrada y salida, así como utilizar
funciones propias que integra R internamente.
Lección 2 de 12
R1 es un lenguaje de programación interpretado de distribución de código abierto (con licencia GNU). Su uso
principal está centrado en la estadística. Esta es una de las mayores razones por las que en los últimos se
ha intensificado su uso en el ámbito de la ciencia de datos.
Figura 1. Logo de R.
Fuente: CRAN.
Los comienzos de R se remontan a 1992. Fue creado por Ross Ihaka y Robert Gentleman. En sus inicios, se
llamó S. En la actualidad, sus principales características son:
Lenguaje interpretado.
Operadores para cálculo sobre variables indexadas (arrays, listas, matrices, vectores,
dataframes, etc.).
Sintaxis básica.
Repositorio de paquetes
–
Uno de sus puntos fuertes se centra en el repositorio de paquetes, que nos brinda la posibilidad de
encontrar cualquier función o solución que deseemos desarrollar ya realizada en un paquete. Tanto los
paquetes como manuales, documentación o preguntas frecuentes, noticias y, por supuesto, la descarga de
R, se encuentran en el CRAN2 (The comprensive R archive network). El repositorio de paquetes disponible
en CRAN es tan grande que, por ejemplo, si tomamos como fecha abril de 2020, nos encontramos con más
de 15 mil paquetes disponibles para su descarga y uso.
Saber más
3.1. Instalación de R
Instalación de Rstudio
0:00 / 33:20 1x
C O NT I NU A R
Antes de tener disponible RStudio y trabajar en este IDE, hay que descargar R base, que incluye el
intérprete de R.
Paso 1
El primer paso es ir a CRAN y, en la pantalla principal, aparecerán links para descargar R tanto
para Windows, Mac OS X y Linux. En esta ocasión, la instalación se realizará desde Windows.
Fuente: CRAN.
Paso 2
Pulsamos sobre el link que corresponda a nuestro sistema operativo y aparecerá la siguiente
pantalla:
Fuente: CRAN.
Paso 3
Pulsamos sobre el link “Install R for the first time”. Nos llevará a la siguiente pantalla:
Fuente: CRAN.
Paso 4
Pulsamos sobre el link “Download R X.X.X for S.O”. Aunque en la imagen aparece la versión 3.6.3,
el alumno descargará la más reciente. Al pulsar sobre el enlace, comenzará automáticamente la
descarga del instalador de R base.
El siguiente paso será seleccionar la ubicación de instalación de R base. Dejamos la que aparezca
por defecto.
En las opciones de configuración, dejamos la opción que viene por defecto (“No”) y pulsamos
“Siguiente”.
C O NT I NU A R
Tras la finalización de R base, instalaremos RStudio3 para disponer de un entorno de programación, más
visual y mucho más fácil de utilizar. Para su instalación, acudiremos a la web de [Link] y
pulsamos en “Download”.
Fuente: [Link]
Paso 2
Fuente: [Link]
Paso 3
En la ventana de selección del menú de inicio, lo dejamos por defecto y pulsamos “Install”.
C O NT I NU A R
Zona de scripting
–
Donde se escribe el código fuente. Principalmente, se utiliza en modo de script o a través de notebooks.
C O NT I NU A R
Para crear un script, hay que pulsar en el icono de nuevo archivo y, posteriormente, sobre “R
Script”.
a <- 5
b <- 2.0
c <- '5'
Paso 3
"
de
código"
z <- 3
Para ejecutar línea a línea, simplemente se pulsa sobre esa línea y se ejecutan los siguientes
comandos: “CNTRL + INTRO”. Aparecerá como resultado dicha línea de código a través de la
zona de comandos.
> a <- 5
>
Paso 6
Además, siempre que se declara una variable, aparecerá en la zona de entorno e historial de
comandos.
Si en lugar de ir línea a línea se quiere ejecutar todo el script, se pulsará el botón “Source” y,
automáticamente, se ejecutará todo el script. Entonces aparecerán las variables “a”, “b”, “c” y “z”
en nuestro entorno.
Finalmente, para guardar un script se pulsa “File” > “Save with encoding” (escogeremos la
codificación por defecto).
Primer_script.zip
301 B
Se recomienda descargar los siguientes archivos y abrirlos con RStudio para seguir correctamente los
primeros pasos a realizar:
Pimer_notebook.zip
219.6 KB
Pimer_notebook_Rmd.zip
1 KB
Paso 1
Para crear el primer notebook (a partir de aquí, solo se utilizarán notebooks), desde la pestaña
“New”, se pulsa en “R Notebook” y, automáticamente, aparecerá un notebook con información
por defecto.
Para trabajar en el primer notebook, habrá que eliminar todo el contenido, excepto la información
del archivo.
---
output: html_notebook
---
1 2 3 4
Para agregar un encabezado, se utilizará el símbolo de almohadilla o hashtag (#). Hay tres niveles:
2. Subtítulo (##).
Para crear una lista de elementos, se utilizará el asterisco (*) para comenzar cada elemento.
1 2 3 4
Para crear una lista numerada, se utilizará el número seguido de un punto, por ejemplo: 1.
1 2 3 4
Para crear diferentes niveles en una lista, se tabulará y agregará un nuevo elemento con el operador más (+).
1 2 3 4
Para escribir en cursiva, se escribirá un asterisco o un guion bajo. Por ejemplo: *cursiva*, _cursiva_.
1 2 3 4
Para escribir en negrita, se utilizarán dos guiones bajos o dos asteriscos. Por ejemplo: **negrita**,
__negrita__.
Todos estos elementos pueden ser comprobados agregando las siguientes líneas al notebook:
# MI PRIMER NOTEBOOK
## FUNDAMENTOS DE R
* Primer elemento
* Segundo elemento
* Tercer elemento
Ahora realizamos una lista numerada:
1. Uno
2. Dos
3. Tres
* Ítem 1
+ Sub-ítem 1
* Ítem 2
+ Sub-ítem 2
El siguiente paso será agregar una celda en la que se incluirá código fuente. Para agregar una
nueva celda (o chunk) de código, se pulsarán las teclas “CNTRL + ALT + I” y aparecerá una celda
en blanco con el siguiente aspecto.
```{r}
```
Paso 2
Dentro del espacio delimitado en la celda, se incluirá todo el código que se desee ejecutar en ese
fragmento (también se podrá ejecutar línea a línea, al igual que un script). Por ejemplo, se pueden
definir variables:
# Mis variables
a <- 7 # Entero
b <- 5.33 # Double
c <- 'Mi cadena de texto' # Sirven tanto comillas simples...
d <- "Mi otra cadena de texto"# ... como comillas dobles
Se ejecuta la celda pulsando en el botón verde “Play”. Aparecerán declaradas las variables en
nuestro entorno de sesión.
Paso 3
Posteriormente, se pueden agregar nuevas celdas de código para imprimir las variables. Para
ello, se utilizará la función “print()” y, como parámetro, recibirá el nombre de la variable.
```{r}
print(a)
```
```{r}
print(b)
```
```{r}
print(c)
```
```{r}
print(d)
```
Resultado
–
Al ejecutarlas, aparecerán los resultados.
Para desplegar ayuda en R, se puede realizar help("nombre_func"), utilizar el operador interrogante con el
nombre de la función ?nombre_func y, también, seleccionar el nombre de la función y pulsar “F1”.
help("print")
## starting httpd help server ... done
?print
AY UDA E N R "S E T WD" Y "G E T WD" V E N TA JA DE M A R K DO WN
Existen dos funciones para establecer un entorno de trabajo (muy útil para cuando existen datasets en una
ruta específica): “setwd” y “getwd”. A través de la primera, se establece un entorno de trabajo desde la ruta
del directorio en el que queramos trabajar; y, con la segunda, obtenemos el entorno de trabajo actual.
getwd()
## [1]
"C:/Users/JMMoreno/Desktop/Modulo_1_Herramientas_Para_Científico_De_Datos/Contenido/UD4/Notebo
oks"
setwd("C:/Users/JMMoreno/Downloads/") # REALIZAR EL CAMBIO EN CONSOLA
Las ventaja que ofrece Markdown es la posibilidad de guardar en RMD el notebook, además de en HTML o
en DOC (también existe la posibilidad de guardar un notebook como PDF, pero se deben instalar ciertas
librerías antes).
IMPORTANTE
1
Antes de exportar un notebook a HTML o DOC, debe guardarse como RMD. Tras ello, se pulsará el
botón “Knit” y “Knit to HTML” o “Knit to Word”.
Step 2 Title
Al guardar un notebook como DOC o HTML, se renderizarán todas las celdas de código y,
automáticamente, aparecerá el archivo.
Una vez que conocemos los básicos de Markdown y cómo ejecutar las cedas de un notebook en R, se
explicará, a lo largo de esta sección, la sintaxis básica de R. Se profundizará sobre los siguientes elementos
de R:
Objetos.
Comentarios.
Operadores.
Tipos de variables.
Sintaxis_basica_R.zip
220.5 KB
Sintaxis_basica_R_Rmd.zip
1.8 KB
C O NT I NU A R
4.1. Objetos
Definición
<-
->
Propiedad mutable
–
Los objetos son mutables, es decir: podemos cambiar su valor en cualquier momento, realizando una
nueva asignación.
Todos los objetos de R se almacenan en memoria RAM hasta que se cierra el programa o se
limpia el entorno de variables.
Almacenamiento 1
Mediante el comando “ls” se pueden ver todos los objetos que tenemos almacenados en
memoria.
ls()
## character(0)
Almacenamiento 2
Si, una vez realizada una operación, se han almacenado objetos demasiado grandes en la
memoria, se pueden eliminar mediante la función “rm”, a la cual habrá que pasar como parámetro
el nombre de la variable a eliminar.
rm(a)
print(ls())
## character(0)
IMPORTANTE
–
No obstante, para ahorrar ciertos pasos, como carga y creación de archivos y objetos, si se desea, se
puede guardar, además del notebook o script, todo el entorno de variables y objetos. Al guardar, se le
asignará un nombre y se guardará con extensión “.rdata”. Cuando se vuelva a abrir la sesión, se restaurarán
todos los objetos que había almacenados.
C O NT I NU A R
4.2. Comentarios
En R, se pueden utilizar dos tipos de comentario:
De una línea
–
Se utiliza el operador "#" y se agrega el comentario.
Multilínea
–
Se abre y se cierra el comentario con comillas dobles (").
# Otra línea
"
Comentario
de
varias
líneas
"
Para facilitar el trabajo, en R, se pueden comentar varias líneas a la vez. Para ello:
1
C O NT I NU A R
4.3. Operadores
En R existen operadores de diferentes tipos:
Aritméticos
Comparación
Lógicos
Se definen algunas variables a <- 7
para mostrar operadores b <- 2
O PE R A DO R E S DE
O PE R A DO R E S A R I T M É T I C O S O PE R A DO R E S LO G Í S T I C O S
C O M PA R A C I Ó N
# Suma
a+b
## [1] 9
# Resta
a-b
## [1] 5
# Multiplicación
a*b
## [1] 14
# División
a/b
## [1] 3.5
# Exponencial
a^b
## [1] 49
# División entera
a %/% b
## [1] 3
O PE R A DO R E S DE
O PE R A DO R E S A R I T M É T I C O S O PE R A DO R E S LO G Í S T I C O S
C O M PA R A C I Ó N
# Menor que
a<b
## [1] FALSE
# Mayor que
a>b
## [1] TRUE
# Negación
!(TRUE) # Equivalente con T
## [1] FALSE
# AND Lógico
TRUE & TRUE
## [1] TRUE
TRUE & FALSE
## [1] FALSE
# OR Lógico
TRUE | FALSE
## [1] TRUE
FALSE | FALSE
## [1] FALSE
C O NT I NU A R
Numéricas
Carácter
Booleanas
Factor
Para determinar el tipo de una variable, se utiliza la función class:
–
class(5)
## [1] "numeric"
class(3.9)
## [1] "numeric"
class("Hola")
## [1] "character"
class(TRUE)
## [1] "logical"
class(T)
## [1] "logical"
# Por el momento, no prestaremos mucha atención sobre la construcción
# de tipos factor, esto se explicará en detalle en próximas unidades
class([Link]('A'))
## [1] "factor"
Lección 5 de 12
V. Estructura de datos
Dentro de R, existen diferentes tipos de estructuras de datos con las que se puede trabajar. Dentro de esta
sección, se explicará en qué consisten y se mostrarán algunas de sus principales funciones:
Vectores
Arrays
Listas
Factores
Matrices
Dataframes
Estructuras_datos.zip
233.9 KB
Estructuras_datos_Rmd.zip
6 KB
5.1. Vectores
En R, un vector es una sucesión de elementos de una dimensión. Un vector puede soportar diferentes tipos
de variables.
a
## [1] "1" "3" "7" "hola"
Es muy importante resaltar que, en los vectores, cuando se aplica una operación, se
hace en todos los elementos del vector, a no ser que se especifique lo contrario.
Para que se puedan aplicar operaciones sobre un vector, todos sus elementos deben ser del mismo tipo. A
continuación se muestran dos ejemplos:
1º 2º
# a+4
# Error in a + 4 : non-numeric argument to binary operator
# Asignación de un nuevo vector
b <- c(1, 30, 4, 56, 9)
Si hay más de un vector del mismo tipo y longitud, se pueden aplicar operaciones sobre ellos:
# Resta de vectores
c <- c(3, 50, 4, 3, 0)
b-c
## [1] -2 -20 0 53 9
# Producto de vectores, elemento a elemento
c*b
## [1] 3 1500 16 168 0
Existen algunas funciones que son propias de los vectores y que permiten realizar aritmética vectorial:
"length"
–
“length”: longitud de un vector.
length(b)
## [1] 5
length(a)
## [1] 4
length(c)
"sum"
–
“sum”: realiza la suma de todos los elementos del vector.
sum(b)
## [1] 100
"prod"
–
“prod”: realiza el producto de todos los elementos del vector.
prod(b)
## [1] 60480
"min"
–
“min”: devuelve el elemento mínimo de un vector.
min(b)
## [1] 1
"max"
–
“max”: devuelve el elemento máximo de un vector.
max(b)
## [1] 56
"range"
–
“range”: devuelve el rango del vector, es decir, de su elemento mínimo a máximo.
range(b)
## [1] 1 56
"mean"
–
“mean”: devuelve la media del vector.
mean(b)
## [1] 20
"var"
–
“var”: devuelve la varianza del vector.
var(b)
## [1] 533.5
"sd"
–
“sd”: devuelve la desviación estándar del vector.
sd(b)
## [1] 23.09762
"cumsum"
–
“cumsum”: devuelve la suma acumulada elemento a elemento del vector.
cumsum(b)
## [1] 1 31 35 91 100
"cumprod"
–
“cumprod”: devuelve el producto acumulado del vector elemento a elemento.
cumprod(b)
## [1] 1 30 120 6720 60480
"sqrt"
–
“sqrt”: raíz de todos los elementos del vector.
sqrt(b)
## [1] 1.000000 5.477226 2.000000 7.483315 3.000000
A través de vectores, se pueden crear sucesiones. En algunas ocasiones, se puede hacer partiendo de un
vector de entrada o creándolo de cero:
EXP
R A N G O DE F I N I DO "S E Q " "R E P" S A M PLE
BO
1:20
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
4:8
## [1] 4 5 6 7 8
EXP
R A N G O DE F I N I DO "S E Q " "R E P" S A M PLE
BO
Generar secuencias a través de la función “seq”. Esta función toma como parámetros origen de la
secuencia, máximo de la secuencia y elemento de división.
EXP
R A N G O DE F I N I DO "S E Q " "R E P" S A M PLE
BO
A través de la función “rep” podemos generar vectores de números repetidos. Esta función toma como
parámetros el número a repetir (o elemento) y el número de veces.
# Un número
rep(2, 200)
## [1] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [38] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [75] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [112] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [149] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [186] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
rep(0.5, 10)
## [1] 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5
# Secuencias de números
rep(1:10, 3)
## [1] 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5
## [26] 6 7 8 9 10
EXP
R A N G O DE F I N I DO "S E Q " "R E P" S A M PLE
BO
Mediante la función “sample”, que toma como parámetros el rango de valores, el número de elementos y si
los valores se generaran con reemplazamiento o no.
[Link]
## [1] 1 7 5 9 2 6 8 10 4 3
[Link]
## [1] 45 42 36 33 44 36 40 45 37 43
EXP
R A N G O DE F I N I DO "S E Q " "R E P" S A M PLE
BO
Otra forma de seleccionar subvectores dentro de un vector ya existente es a través de operaciones de
comparación (expresiones booleanas):
# Vamos a asignar a todos los elementos del vector que sean menores de 7 el valor 1
EXP
R A N G O DE F I N I DO "S E Q " "R E P" S A M PLE
BO
# Generamos vector
[Link] <- sample(30:60, 10, replace = F)
5.2. Arrays
A diferencia de los vectores, en un array, los elementos deben ser del mismo tipo. También son indexables.
[Link]
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
[Link]
## [1] 50 59 33 60 34 55 57 45 58 30
length([Link]) # Divisible entre 2 y 5
## [1] 10
dim([Link]) <- c(5,2)
[Link] # Vector transformado en array
## [,1] [,2]
## [1,] 50 55
## [2,] 59 57
## [3,] 33 45
## [4,] 60 58
## [5,] 34 30
Ejemplo
–
A continuación, se muestran diferentes maneras de seleccionar elementos de un array:
[Link]
## , , 1
##
## [,1] [,2] [,3] [,4]
## [1,] 1 6 11 16
## [2,] 2 7 12 17
## [3,] 3 8 13 18
## [4,] 4 9 14 19
## [5,] 5 10 15 20
##
## , , 2
##
## [,1] [,2] [,3] [,4]
## [1,] 21 26 31 36
## [2,] 22 27 32 37
## [3,] 23 28 33 38
## [4,] 24 29 34 39
## [5,] 25 30 35 40
print(dim([Link]))
## [1] 5 4 2
# Sólo primera dimensión.
[Link][,,1]
## [,1] [,2] [,3] [,4]
## [1,] 1 6 11 16
## [2,] 2 7 12 17
## [3,] 3 8 13 18
## [4,] 4 9 14 19
## [5,] 5 10 15 20
# Columna 2 de las dos dimensiones
[Link][,2,1:2]
## [,1] [,2]
## [1,] 6 26
## [2,] 7 27
## [3,] 8 28
## [4,] 9 29
## [5,] 10 30
# Fila 4 de la segunda dimensión.
[Link][4, ,2]
## [1] 24 29 34 39
# Elementos en tercera y cuarta posición de la quinta fila, de ambas dimensiones
[Link][5,c(3,4) , ]
## [,1] [,2]
## [1,] 15 35
## [2,] 20 40
# Todas las filas de la segunda columna en adelante de la primera dimensión
[Link][ , 2:length([Link][1,,1]), 1]
## [,1] [,2] [,3]
## [1,] 6 11 16
## [2,] 7 12 17
## [3,] 8 13 18
## [4,] 9 14 19
## [5,] 10 15 20
Análogamente, también es posible indexar un array a través de otro array.
–
index <- array(c(2, 1:3, 1:2), c(2,3))
index
## [,1] [,2] [,3]
## [1,] 2 2 1
## [2,] 1 3 2
[Link][index]
## [1] 7 31
Operaciones aritméticas
–
Del mismo modo que los vectores, sobre los arrays también podemos aplicar operaciones aritméticas,
como las descritas anteriormente, mostramos algunos ejemplos:
# Suma
sum([Link])
## [1] 820
# Media
mean([Link])
## [1] 20.5
# Rango
range([Link])
## [1] 1 40
# Máximo
max([Link])
## [1] 40
# ...
Función "aperm"
–
Si se quieren permutar las dimensiones de un array, se puede hacer uso de la función “aperm”:
aperm([Link])
## , , 1
##
## [,1] [,2] [,3] [,4]
## [1,] 1 6 11 16
## [2,] 21 26 31 36
##
## , , 2
##
## [,1] [,2] [,3] [,4]
## [1,] 2 7 12 17
## [2,] 22 27 32 37
##
## , , 3
##
## [,1] [,2] [,3] [,4]
## [1,] 3 8 13 18
## [2,] 23 28 33 38
##
## , , 4
##
## [,1] [,2] [,3] [,4]
## [1,] 4 9 14 19
## [2,] 24 29 34 39
##
## , , 5
##
## [,1] [,2] [,3] [,4]
## [1,] 5 10 15 20
## [2,] 25 30 35 40
C O NT I NU A R
5.3. Listas
Con cierta similitud a un vector, una lista, es una colección de objectos, indexable a través del operador “[[
]]” (doble corchete). Soporta desde el mismo tipo de dato a diferentes tipos de datos. La declaración de una
lista se realiza con la función “list”.
"list"
–
[Link] <- list(c(1:40))
[Link]
## [[1]]
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
## [26] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
[Link][1] # Solamente tiene un elemento la lista, que es un vector
## [[1]]
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
## [26] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
[Link][[1]][5] # Accedemos al primer elemento de la lista, posición 5 del vector.
## [1] 5
Nombres
–
Algo que es siempre aconsejable para poder identificar los diferentes campos o elementos de una lista, es
utilizar nombres.
[Link]$alumnos
## [1] "Juan" "María" "Alfredo"
[Link][["alumnos"]]
## [1] "Juan" "María" "Alfredo"
Agregar elementos
–
Si un elemento no existe en un componente de la lista, simplemente se agrega:
[Link]
## $alumnos
## [1] "Juan" "María" "Alfredo" "Nuevo alumno"
##
## $calificaciones
## [1] 7 4 5 9
##
## $edad
## [1] 15 16 17 15
Clase propia
–
class([Link])
## [1] "list"
C O NT I NU A R
5.4. Factores
Los factores son vectores especiales que se utilizan únicamente para la representación de variables
categóricas, que son las que indican una cualidad o característica, como, por ejemplo, alto, bajo, medio, etc.
Crear una variable categórica
1
Para crear una variable categórica, tenemos que pasar un vector de caracteres a la función
factor.
Una variable categórica se caracteriza porque cada categoría en R se denomina nivel (level). Se
puede acceder a sus niveles a través de la función “levels”:
levels([Link])
class([Link])
## [1] "factor"
[Link]
## [1] ENERO FEBRERO <NA> ABRIL
## Levels: ABRIL ENERO FEBRERO
C O NT I NU A R
5.5. Matrices
Previamente, se han tratado los arrays multidimensionales. Una matriz no es ni más ni menos que un array
de dos dimensiones. No obstante, las matrices tienen algunos tipos de funciones especiales con las que se
pueden trabajar. Se describirán posteriormente.
Además de todas las funciones ya vistas que pueden realizarse en arrays y las formas disponibles de
indexación, en matrices existen siguientes funciones propias:
"ncol"
–
“ncol”: devuelve el número de columnas.
# Número de columnas
ncol([Link])
## [1] 6
"nrow"
–
“nrow”: devuelve el número de filas.
# Número de filas
nrow([Link])
## [1] 5
"diag"
–
“diag”: devuelve la diagonal de la matriz.
# Diagonal
diag([Link])
## [1] 1 7 13 19 25
"crossprod"
–
“crossprod”: realiza el producto entre dos matrices.
"t"
–
“t”: devuelve la traspuesta de una matriz.
# Traspuesta
t([Link])
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 2 3 4 5
## [2,] 6 7 8 9 10
## [3,] 11 12 13 14 15
## [4,] 16 17 18 19 20
## [5,] 21 22 23 24 25
## [6,] 26 27 28 29 30
"svd"
–
“svd”: valores singulares de una matriz.
# Valores singulares
svd([Link])
## $d
## [1] 9.716531e+01 3.728537e+00 2.538160e-15 1.947191e-15 6.089851e-16
##
## $u
## [,1] [,2] [,3] [,4] [,5]
## [1,] -0.4018926 -0.66217998 0.48765261 0.2233859 -0.3351025
## [2,] -0.4240057 -0.34672632 -0.80457360 -0.2008214 -0.1110499
## [3,] -0.4461188 -0.03127266 0.07019089 0.2397858 0.8588224
## [4,] -0.4682320 0.28418100 0.32272856 -0.7706509 -0.0440853
## [5,] -0.4903451 0.59963465 -0.07599847 0.5083006 -0.3685848
##
## $v
## [,1] [,2] [,3] [,4] [,5]
## [1,] -0.0711459 0.7202415 -0.55959544 -0.09385682 0.1469272
## [2,] -0.1859294 0.5105569 0.24248261 0.08217043 0.2585642
## [3,] -0.3007128 0.3008724 0.22067008 0.22952872 -0.8429267
## [4,] -0.4154963 0.0911878 0.54034856 -0.61659563 0.1878316
## [5,] -0.5302798 -0.1184968 0.08533938 0.68520749 0.3842241
## [6,] -0.6450632 -0.3281813 -0.52924519 -0.28645419 -0.1346204
"eigen"
–
“eigen”: realiza el cálculo de autovalores y autovectores (la matriz tiene que ser regular).
eigen([Link])
## eigen() decomposition
## $values
## [1] 1.611684e+01 -1.116844e+00 -5.700691e-16
##
## $vectors
## [,1] [,2] [,3]
## [1,] -0.4645473 -0.8829060 0.4082483
## [2,] -0.5707955 -0.2395204 -0.8164966
## [3,] -0.6770438 0.4038651 0.4082483
"[Link]"
–
Puede transformarse un vector como matriz a través de la función “[Link]”.
[Link]([Link])
## [,1] [,2] [,3] [,4]
## [1,] 1 6 11 16
## [2,] 2 7 12 17
## [3,] 3 8 13 18
## [4,] 4 9 14 19
## [5,] 5 10 15 20
class([Link])
## [1] "matrix"
Clase propia
–
Las matrices, al igual que el resto de estructuras de datos que se trabajan en esta lección, tienen una clase
propia:
class([Link])
## [1] "matrix"
C O NT I NU A R
5.6. Dataframes
Para finalizar esta sección, se hablará sobre dataframes.
De forma resumida, un
dataframe funciona de forma
similar a una matriz, a una hoja
de Excel o a una base de
¿Cómo funciona? datos. Todos sus elementos
tienen un índice común a cada
observación. En dataframes se
habla de variables en lugar de
columnas y cada variable tiene
un nombre asociado. Más
Para aprender las características y diferentes funcionalidades que ofrece un dataframe, se trabajará
directamente con un archivo CSV. La función encargada de leer, cargar y transformar un archivo CSV como
dataframe es “[Link]”.
"sep"
El parámetro “sep” puede tomar diferentes valores en función del separador del CSV, ya sea en
coma, punto y coma, barra, etc.
2
"header"
El parámetro “header” se utilizará para que la primera fila sea tomada como cabecera del
dataframe, es decir, los nombres de las columnas.
3
"[Link]"
Es importante que, si se conoce de antemano en el CSV que un valor debe ser tratado como nulo,
y para que R lo reconozca como tal, debe utilizarse el parámetro “[Link]” especificando el
valor que debe ser tratado como nulo.
df <- [Link]("[Link]")
[Link]
9.5 KB
1Este archivo contiene información bursátil sobre las acciones de la empresa Facebook, puede
descargarse el dataset original desde este enlace.
Del mismo modo, se aconseja al alumno probar otro tipo de datasets sobre información bursátil de
diferentes compañías, pueden tomarse como referencia los datasets disponibles en este enlace.
Columnas
–
De un modo similar a las listas, puede llamarse a las columnas a través de dobles corchetes, con el
operador “$” o a través de indexación:
df$Open
## [1] 42.05 36.53 32.61 31.37 32.95 32.90 31.48 28.70 28.55 28.89 27.20 26.70
## [13] 26.07 27.00 26.55 27.18 27.48 27.66 27.65 28.51 29.96 31.54 31.92 31.67
## [25] 32.41 32.86 32.69 32.46 31.96 31.92 31.25 30.91 31.32 31.44 32.10 32.43
## [37] 31.48 30.70 31.04 30.50 28.48 28.31 29.41 29.00 28.12 28.82 28.39 27.75
df[[2]]
## [1] 42.05 36.53 32.61 31.37 32.95 32.90 31.48 28.70 28.55 28.89 27.20 26.70
## [13] 26.07 27.00 26.55 27.18 27.48 27.66 27.65 28.51 29.96 31.54 31.92 31.67
## [25] 32.41 32.86 32.69 32.46 31.96 31.92 31.25 30.91 31.32 31.44 32.10 32.43
## [37] 31.48 30.70 31.04 30.50 28.48 28.31 29.41 29.00 28.12 28.82 28.39 27.75
df[["Open"]]
## [1] 42.05 36.53 32.61 31.37 32.95 32.90 31.48 28.70 28.55 28.89 27.20 26.70
## [13] 26.07 27.00 26.55 27.18 27.48 27.66 27.65 28.51 29.96 31.54 31.92 31.67
## [25] 32.41 32.86 32.69 32.46 31.96 31.92 31.25 30.91 31.32 31.44 32.10 32.43
## [37] 31.48 30.70 31.04 30.50 28.48 28.31 29.41 29.00 28.12 28.82 28.39 27.75
Resultado
–
El resultado, en todos los casos, es un vector sobre el que podemos aplicar las mismas funciones de
indexación y operaciones ya vistas en la sección de vectores.
class(df)
## [1] "[Link]"
C LA S E "AT TA C H" "DE TA C H"
Para ahorrar trabajo y no tener que escribir siempre el nombre del dataframe cuando se quiera trabajar con
una variable, puede utilizarse la función “attach” y cargará todas las columnas como variables:
attach(df)
Date
## [1] 2012-05-18 2012-05-21 2012-05-22 2012-05-23 2012-05-24 2012-05-25
## [7] 2012-05-29 2012-05-30 2012-05-31 2012-06-01 2012-06-04 2012-06-05
## [13] 2012-06-06 2012-06-07 2012-06-08 2012-06-11 2012-06-12 2012-06-13
Cuando ha finalizado el trabajo con el dataframe, se utiliza “detach” para que sea necesario declarar el
nombre del dataframe para trabajar con él:
detach(df)
Algunas funciones principales para realizar con dataframes son las siguientes:
"summary"
–
“summary”: devuelve un resumen estadístico de un dataframe.
# Resumen estadístico de un dataframe
summary(df)
## Date Open High Low
## 2012-05-18: 1 Min. :18.08 Min. :18.27 Min. :17.55
## 2012-05-21: 1 1st Qu.:21.12 1st Qu.:21.59 1st Qu.:20.61
## 2012-05-22: 1 Median :27.02 Median :27.56 Median :26.44
## 2012-05-23: 1 Mean :25.72 Mean :26.23 Mean :25.15
## 2012-05-24: 1 3rd Qu.:28.94 3rd Qu.:29.51 3rd Qu.:28.39
## 2012-05-25: 1 Max. :42.05 Max. :45.00 Max. :38.00
## (Other) :190
## Close Volume [Link]
## Min. :17.73 Min. : 8108300 Min. :17.73
## 1st Qu.:21.11 1st Qu.: 30382925 1st Qu.:21.11
## Median :26.91 Median : 46179100 Median :26.91
## Mean :25.63 Mean : 56928836 Mean :25.63
## 3rd Qu.:29.01 3rd Qu.: 72741500 3rd Qu.:29.01
## Max. :38.23 Max. :573576400 Max. :38.23
##
"str"
–
“str”: devuelve el tipo de variable del dataframe.
dim
–
dim: dimensiones del dataframe filas x columnas
# Dimensiones de un dataframe
dim(df)
## [1] 196 7
"colnames"
–
“colnames”: nombre de las columnas del dataframe.
"rownames"
–
# Nombre de las filas
rownames(df)
## [1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12"
## [13] "13" "14" "15" "16" "17" "18" "19" "20" "21" "22" "23" "24"
## [25] "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] "49" "50" "51" "52" "53" "54" "55" "56" "57" "58" "59" "60"
## [61] "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] "85" "86" "87" "88" "89" "90" "91" "92" "93" "94" "95" "96"
## [97] "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] "121" "122" "123" "124" "125" "126" "127" "128" "129" "130" "131" "132"
## [133] "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] "157" "158" "159" "160" "161" "162" "163" "164" "165" "166" "167" "168"
## [169] "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] "193" "194" "195" "196"
"nrow"
–
“nrow”: número de filas.
# Número de filas
nrow(df)
## [1] 196
"ncol"
–
“ncol”: número de columnas.
# Número de columnas
ncol(df)
## [1] 7
"head"
–
“head”: primeras n posiciones del dataframe.
"tail"
–
“tail”: últimas n posiciones del dataframe.
"rbind" y "cbind"
Mediante “rbind” se añade una nueva fila. Por su parte, “cbind” añade una nueva columna.
df <- rbind(df, c("2013-03-01", 35.12, 39.32, 32.75, 34.65, 57052800, 34.65), stringsAsFactors=T)
tail(df)
head(df)
"$"
Otra forma de añadir una columna al dataframe es asignar el nombre a través del operador “$” y
un vector de la misma longitud.
head(df)
"NULL"
Si se desea eliminar una variable, se aplicará “NULL” a esta:
# Borramos la columna
df$index <- NULL
4
"subset" y "select"
Para obtener un subconjunto del dataframe, empleamos “subset”. Para seleccionar las columnas
a tener en cuenta, se aplicará el parámetro “select”.
muestra
## High Low
## 1 45 38
## 2 36.66 33
## 3 33.59 30.94
## 4 32.5 31.36
## 5 33.21 31.77
## 6 32.95 31.11
## 7 31.69 28.65
## 8 29.55 27.86
## 9 29.67 26.83
## 10 29.15 27.39
## 11 27.65 26.44
## 12 27.76 25.75
## 13 27.17 25.52
## 14 27.35 26.15
5
"order"
Para ordenar un dataframe, se usa función “order”.
head(ordered)
"names"
Si mediante la función “names” accedemos a los nombres de las variables, es posible renombrar
las columnas
names(df)
[Link].
Con la función “[Link]” se pueden convertir vectores, matrices, listas y arrays como
dataframes.
[Link]
## V1 V2 V3 V4 V5 V6 V7 V8
## 1 1 6 11 16 21 26 31 36
## 2 2 7 12 17 22 27 32 37
## 3 3 8 13 18 23 28 33 38
## 4 4 9 14 19 24 29 34 39
## 5 5 10 15 20 25 30 35 40
"C O M PLE T E . C A S E S BO R
VA LO R N ULO "S UM M A R Y " "I S . N A "
"
"C O M PLE T E . C A S E S BO R
VA LO R N ULO "S UM M A R Y " "I S . N A "
"
Una forma inicial de comprobar si hay nulos en un dataframe, es a través del comando “summary”.
"C O M PLE T E . C A S E S BO R
VA LO R N ULO "S UM M A R Y " "I S . N A "
"
"C O M PLE T E . C A S E S BO R
VA LO R N ULO "S UM M A R Y " "I S . N A "
"
Pueden detectarse las filas en las que hay nulos a través de “[Link]”.
[Link]([Link])
## [1] TRUE TRUE FALSE TRUE TRUE
"C O M PLE T E . C A S E S BO R
VA LO R N ULO "S UM M A R Y " "I S . N A "
"
[Link]
## V1 V2 V3 V4 V5 V6 V7 V8
## 1 1 6 11 16 21 26 31 36
## 2 2 7 12 17 22 27 32 37
## 4 4 9 14 19 24 29 34 39
## 5 5 10 15 20 25 30 35 40
"C O M PLE T E . C A S E S BO R
VA LO R N ULO "S UM M A R Y " "I S . N A "
"
Si, por el contrario, interesa reemplazar el valor nulo por otro valor:
[Link]
## V1 V2 V3 V4 V5 V6 V7 V8
## 1 1 6 11 16 21 26 31 36
## 2 2 7 12 17 22 27 32 37
## 3 3 1000 13 18 23 28 33 38
## 4 4 9 14 19 24 29 34 39
## 5 5 10 15 20 25 30 35 40
Lección 6 de 12
Condicionales
Bucles
Herramientas_control.zip
220.7 KB
Herramientas_control_Rmd.zip
2.1 KB
C O NT I NU A R
6.1. Condicionales
Las sentencias condicionales se emplean para derivar la ejecución de un programa hacia una acción u otra
diferente en función de una expresión booleana. Esto, traducido a un lenguaje de programación, se basa en
lo siguiente:
Para aplicar sentencias condicionales, R dispone de los comandos “if” y “else”. A continuación se muestran
dos ejemplos:
Primer ejemplo
–
Se propondrá un primer ejemplo simple: si un número es mayor que cinco lo multiplicamos por dos; si no,
lo dividimos.
number <- 6
# Creamos un vector
[Link] <- c(3, 4, 9, 10, 2, 20)
} else {
}
## [1] 4
En muchas ocasiones, es probable que existan múltiples restricciones para la realización de un programa;
esto nos obligará a subdividir los bloques de condicionales en “if-else” anidados; en otros casos “if-else
apilados”, se mostrará primero un ejemplo de condicional anidado.
Ejemplos de "if-else" anidado y apilado
1
"if-else" anidado
Dado un número, si es mayor que 10, si es par, devolver “True”; si no, “False”; y, si no es mayor que
10, dividir el número entre dos.
# Tomamos un número
a <- 13
if (a > 10) {
if (a %% 2 == 0) {
print(TRUE)
} else {
print(FALSE)
} else {
print(a/2)
## [1] FALSE
a <- 12
if (a > 10) {
if (a %% 2 == 0) {
print(TRUE)
} else {
print(FALSE)
} else {
print(a/2)
## [1] TRUE
2
"if-else" apilado
Dado un vector, tomar el valor máximo. Si es impar, elevar el valor al cubo; si no, si el valor mínimo
del vector es mayor a 10, devolvemos la suma del vector; si no, mostramos el producto del vector.
if (max(vec) %% 2 == 0) {
print(max(vec)^3)
print(sum(vec))
} else {
print(prod(vec))
## [1] 491400
C O NT I NU A R
6.2. Bucles
Algo muy habitual cuando se trabaja con estructuras de datos es tener que recorrer iterativamente sus
elementos. Para realizar esta acción, en R podemos elegir los siguientes tipos de bucles:
"for"
–
“for”: recorre una secuencia y realiza una acción en cada elemento de esta.
for (i in 1:10){
# Elevamos todos los valores al cubo
print(i^3)
}
## [1] 1
## [1] 8
## [1] 27
## [1] 64
## [1] 125
## [1] 216
## [1] 343
## [1] 512
## [1] 729
## [1] 1000
[Link] <- matrix(1:30, nrow=3, ncol=3)
# Recorremos filas
for (fila in 1:dim([Link])[1]){
# Recorremos columnas
for (columna in 1:dim([Link])[2]){
cat('Elemento: ', fila, ' ', columna, ' --> ', fila*columna, '\n')
}
}
## Elemento: 1 1 --> 1
## Elemento: 1 2 --> 2
## Elemento: 1 3 --> 3
## Elemento: 2 1 --> 2
## Elemento: 2 2 --> 4
## Elemento: 2 3 --> 6
## Elemento: 3 1 --> 3
## Elemento: 3 2 --> 6
## Elemento: 3 3 --> 9
"while"
–
“while”: se necesita una expresión booleana. Mientras dicha expresión se cumpla, se realiza la misma
acción. Hasta que no se cumpla dicha expresión booleana, esto supondrá una acción de parada.
i <- 1
x <- 1
repeat {
print(x)
x <- x+1
if (x == 6){
break
}
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
"next"
–
En algunas ocasiones, cuando una expresión booleana se cumpla, simplemente no habrá que hacer nada
más que pasar a la siguiente iteración. Para este propósito existe la operación “next”.
if (v[item] %% 2 == 0) {
next
} else {
print(item * v[item])
}
}
## [1] 1
## [1] 9
## [1] 35
## [1] 54
## [1] 1064
Lección 7 de 12
VII. Funciones
Cuando una compañía realiza procesos que serán llevados a producción, uno de los elementos más
importantes es que sus programas estén modularizados con funciones; de esta manera, se mejora la
legibilidad del código, la velocidad, la reusabilidad y aumenta la tolerancia a fallos del mismo.
[Link]
221.8 KB
Funciones_Rmd.zip
2.5 KB
En R, para declarar una función se utiliza el comando “function”. Como en cualquier lenguaje de
programación, las funciones pueden recibir parámetros de entrada y parámetros de salida. Se describirán
algunos ejemplos para comprender estas dos metodologías.
"function"
1
En primer lugar, se realizará una función simple que reciba como parámetro de entrada un
número y lo devuelva elevado al cubo. Para devolver cualquier valor de una función, será
necesario utilizar la palabra reservada “return”:
# Creamos la función
[Link] <- function(number){
result <- number ^ 3
return (result)
}
# Llamamos a la función
a <- [Link](number = 3)
a
## [1] 27
2
Si se realiza una modificación en el ejemplo anterior, es posible codificarlo para que el programa
reciba dos números y devuelva como resultado el primer número elevado al segundo.
# Creamos la función
[Link] <- function(number, pow){
result <- number ^ pow
return (result)
}
# Llamamos a la función
a <- [Link](number = 3, pow = 4)
a
## [1] 81
3
Por lo general, R está preparado para devolver un solo valor en una función, no obstante, si se
devuelve una estructura de datos como, por ejemplo, una lista, posteriormente se podrá acceder
por separado a sus ítems.
Ejemplo
–
En el siguiente ejemplo, se desarrollará una función que reciba como parámetro de entrada un vector y
devuelva su valor máximo y mínimo:
[Link] <- function(v){
# Inicializamos una lista vacía.
[Link] <- list()
return ([Link])
}
results$min
## [1] 8
results$max
## [1] 100
Existe una familia de funciones que sirven para automatizar una función sobre una secuencia de valores. De
esta manera, y omitiendo el uso de bucles, estas funciones son todas derivadas de la función principal
“apply”. Se mostrará un ejemplo de cada tipo de función:
Derivadas de la función principal "apply"
1
"apply"
“apply”: realiza una misma operación sobre los ejes, por ejemplo: supongamos que se quiere
obtener la suma de las columnas; la función “apply” recibirá como parámetros, los datos, la
dirección (filas o columnas) y la función a aplicar.
## [,1] [,2]
## [1,] 1 6
## [2,] 2 7
## [3,] 3 8
## [4,] 4 9
## [5,] 5 10
apply(m, 2, sum)
## [1] 15 40
2
"lapply"
“lapply”: misma función que “apply”, pero su funcionamiento está optimizado en listas. Devuelve
el resultado también como una lista.
## Warning in matrix(5:15, ncol = 2, nrow = 5): data length [11] is not a sub-
## multiple or multiple of the number of rows [5]
## [[1]]
## [,1] [,2]
## [1,] 1 6
## [2,] 2 7
## [3,] 3 8
## [4,] 4 9
## [5,] 5 10
##
## [[2]]
## [,1] [,2]
## [1,] 5 10
## [2,] 6 11
## [3,] 7 12
## [4,] 8 13
## [5,] 9 14
# Obtenemos la multiplicación
lapply(lista, FUN = prod)
## [[1]]
## [1] 3628800
##
## [[2]]
## [1] 3632428800
3
"sapply"
“sapply”: recibe una lista, aplica una función y devuelve un vector.
sapply(lista, sum)
## [1] 55 95
4
"tapply"
“tapply”: realiza una operación en función de un vector de factores, operación aconsejable para
dataframes.
## $IMPAR
## [1] 3.316625 3.605551 3.872983 4.123106 4.358899
##
## $PAR
## [1] 3.162278 3.464102 3.741657 4.000000 4.242641 4.472136
## IMPAR PAR
## 75 90
5
"mapply"
“mapply”: opera entre matrices o vectores y devuelve el resultado como una lista o vector. Esto
depende del número de iteraciones necesarias.
mapply(sum, v, v.2, 1)
## [1] 7 9 11 13 15 17 19 21 23 25
## [[1]]
## [1] 1 1 1 1 1
##
## [[2]]
## [1] 2 2 2 2
##
## [[3]]
## [1] 3 3 3
##
## [[4]]
## [1] 4 4
##
## [[5]]
## [1] 5
"[Link]"
“[Link]”: devuelve un booleano en función de si la variable es o no caracter.
a <- "hola"
[Link](a)
## [1] TRUE
b <- 5
[Link](b)
## [1] FALSE
7
"[Link]"
“[Link]”: devuelve un booleano en función de si la variable es o no categórica.
a <- "hola"
b <- [Link]("hola")
[Link](a)
## [1] FALSE
[Link](b)
## [1] TRUE
8
"[Link]"
“[Link]”: devuelve un booleano en función de si la variable es numérica o no.
a <- 5
b <- 3.0
c <- "a"
[Link](a)
## [1] TRUE
[Link](b)
## [1] TRUE
[Link](c)
## [1] FALSE
9
"[Link]"
“[Link]”: transforma una variable categórica o numérica a caracter.
class(a)
## [1] "factor"
## [1] "character"
[Link](3.23)
## [1] "3.23"
[Link](5)
## [1] "5"
10
"[Link]"
“[Link]”: transforma en variable numérica una variable categórica.
[Link](a)
## [1] 2 1
[Link]("58.45")
## [1] 58.45
11
"[Link]"
“[Link]”: permite transformar a factor un vector, ya sea numérico o de caracteres.
a <- c(1,2,1,2)
b <- c("hola", "adios", "hola", "hola", "adios")
[Link](a)
## [1] 1 2 1 2
## Levels: 1 2
[Link](b)
"table"
“table”: muestra la frecuencia de los valores únicos de una variable.
table(b)
## b
## adios hola
## 2 3
table(a)
## a
## 1 2
## 2 2
13
"unique"
“unique”: muestra los valores únicos de una variable.
y <- c(1, 2, 3, 5, 9, 1, 2, 3, 9, 0)
unique(y)
## [1] 1 2 3 5 9 0
14
"[Link]"
“[Link]”: recibe como parámetro un número entero. Replica siempre el mismo resultado (muy
recomendable cuando trabajamos con aleatorios).
[Link](777)
sample(1:10, replace=T)
## [1] 8 1 10 3 10 9 9 4 4 10
sample(1:10, replace=T)
## [1] 7 6 5 7 8 10 2 7 5 6
sample(1:10, replace=T)
## [1] 8 2 9 1 7 2 10 4 1 1
15
"[Link]"
“[Link]”: permite crear de cero un dataframe a través de vectores o matrices.
df
str(df)
names(df)
VIII. Resumen
el IDE R Studio, previa instalación de R base, para comenzar sus tareas en programación estadística.
Sintaxis de R
El alumno ha aprendido los principales elementos que intervienen en la sintaxis de R, como son la
declaración de variables, qué tipo de variables y datos existen, cómo realizar anotaciones en Markdown,
cómo agregar comentarios y los principales tipos de operadores en R.
Funciones
También ha aprendido a definir nuevas funciones, cómo utilizar las funciones de los paquetes y las
diferentes funciones de “apply” en función del tipo de datos que se utilice, con el objetivo principal de
optimizar operaciones en filas y columnas en las diferentes estructuras de datos, lo que ahorra en uso de
bucles.
Flujo de un programa
ENUNCIADO
2. Crea un array de dos dimensiones, de 10 elementos cada una, con los 20 primeros números pares
del 0 al 40.
3. Crea una muestra de números aleatorios del 1 a 100 con repetición de longitud 10.
4. Crea un nuevo vector que sea el resultado de la suma fila a fila de cada dimensión del array.
5. Finalmente, crea un dataframe con todas las estructuras de datos creadas anteriormente y
CASO PRÁCTICO 2
Mediante los siguientes datos, sobre los que se simulará información aleatoria para los años
comprendidos entre 2016 y 2020:
1. Crea una matriz de dos columnas con los vectores “vec.1” y “vec.2”.
2. Crea un nuevo vector que sea la suma de las filas de la matriz al cuadrado.
3. Crea un dataframe con todos los vectores con las siguientes columnas:
vec.1: Low.
vec.2: High.
6. Asigna valor nulo (NA) a todos los valores de la columna “Low” por debajo de 20.
9. Asigna a cada valor “NaN” la media de la columna “Low” (pista: investigar en la función “mean”
10. Obtén un subconjunto de los datos que sean todos los valores de 2020 y que tengan valor superior
a 90 en la columna “High”.
11. Investiga sobre la función “[Link]” y crea un archivo CSV con nombre “2020_Values.csv”.
VER SOLUCIÓN
SOLUCIÓN
Para visualizar la solución de los casos prácticos hay que descargar los siguientes archivos.
EJERCICIO_1_SOLUCION.zip
219.6 KB
EJERCICIO_1_SOLUCION_Rmd.zip
860 B
EJERCICIO_2_SOLUCION.zip
220.7 KB
EJERCICIO_2_SOLUCION_Rmd.zip
1.2 KB
Lección 10 de 12
X. Enlaces de interés
Libros gratuitos sobre R disponibles en el CRAN, todos ellos de un nivel básico para que el alumno pueda
completar los conocimientos vistos en la asignatura con bibliografía externa.
ABRIR ENLACE
ABRIR ENLACE
Manuales oficiales del CRAN de R. Está disponible una versión de manuales en castellano.
Manuales CRAN R.
ABRIR ENLACE
Recursos adicionales sobre RStudio. En la propia web de RStudio hay una serie de videos que explican el IDE
y muestran los principales fundamentos de R. Son perfectos para complementar el estudio de esta unidad.
ABRIR ENLACE
En la página web de RStudio, se recomiendan una serie de libros de todos los niveles, todos gratuitos y que
pueden conseguirse online.
Libros RStudio.
ABRIR ENLACE
Una forma muy interesante de comprender las principales funcionalidades de un paquete es echando un
vistazo a sus cheatsheet, ya que, de forma muy visual, es posible comprender de manera resumida todas
las funciones principales de dicho paquete. RStudio tiene una sección sobre cheatsheet sobre muchos de
los principales paquetes.
R Cheatsheets.
ABRIR ENLACE
Lección 11 de 12
XI. Glosario
Objeto
–
Un objeto en R es cualquier elemento que se cree en un entorno de trabajo, ya sea una variable, función, etc.
Matriz
–
Estructura de datos conformada por dos dimensiones y estructurada en n filas y m columnas
Vector
–
Estructura de datos más básica de R. Es una sucesión finita de valores. Para declarar un vector se utiliza la
función “c()”.
Factor
–
Similar a un vector. Sin embargo, representa a una variable categórica, por lo que todas sus categorías o
niveles representan una cualidad de un objeto, por ejemplo: alto, bajo.
Nivel
–
Es cada una de las categorías de una variable categórica. Podemos acceder a sus valores con la función
“levels()”.
Bucle (repeat)
–
Se trata de un bucle en el que, hasta que no se cumple una condición de parada o se encuentra un
elemento que fuerce su salida break, realiza constantemente la misma acción.
Funciones "apply"
–
Conjunto de funciones destinadas a operar en todo tipo de estructuras de datos, ya sean vectores, listas,
matrices, factores, arrays o dataframes. Sus funciones están optimizadas para iterar sobre los elementos
de la estructura de datos que reciba, lo que ahorra el uso de bucles. Pertenecen a esta familia de funciones
“Apply”, “Sapply”, “Tapply”, “Lapply” y “Mapply”.
CRAN
–
Comprensive R archive network. Se trata del repositorio central de la comunidad de R. Dentro de este
repositorio se puede encontrar desde el journal de R, archivos de instalación de R base y manuales de R,
hasta la enorme lista de paquetes desarrollados por la comunidad.
R Base
–
Versión más ligera de R que incluye su intérprete. Es un software que cada vez está más en desuso desde
la aparición de RStudio.
R Studio
–
IDE de programación más utilizado por la comunidad de desarrolladores R. Está estructurado en cuatro
zonas principales para la gestión completa y supervisión del desarrollo que realice cualquier usuario.
CHUNK
–
Celda de código fuente que podemos implementar en R Notebook y ejecutar su contenido de forma aislada.
Lección 12 de 12
XII. Bibliografía