Sie sind auf Seite 1von 98

R desde el principio: curso ceRo de R

Edición: ceRo V1.02 Ed. del Orto–2018-02-01

Contenido
Presentación curso: R desde el principio: curso ceRo de R
Capítulo 1: R desde el principio
Capítulo 2: Prácticas

© Emilio López Cano y Javier Martínez Moguerza. Licencia CC BY-NC-ND 4.0


ISBN: 978-84-7923-526-0. Ediciones del Orto.

Este libro forma parte del material didáctico utilizado por los autores en programas de formación
a pre-graduados, post-graduados y profesionales sobre el uso del software estadístico R en diversos
ámbitos. Correo electrónico de contacto: emilio.lcano@uclm.es

Presentación curso / Página 1


ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio: curso ceRo de R

Presentación
El presente manual se utilizó por primera vez en el Taller homónimo durante las VI Jornadas
de Usuarios de R celebradas en Santiago de Compostela el 24 de octubre de 20141 . Esta primera
parte de presentación del curso se personaliza en cada edición teniendo en cuenta la audiencia y sus
objetivos. El manual puede utilizarse libremente para uso no comercial bajo licencia CC BY-NC-ND
4.0. Contacta con los autores2 si lo quieres utilizar para usos comerciales o quieres programar un
curso específico en tu ámbito utilizando el material.

Taller R desde el principio


En el día a día del análisis de datos tanto para investigación como para cualquier otro uso,
aprendemos día a día cosas nuevas que vamos incorporando a nuestro conocimiento. Esa maldita
curva de aprendizaje que en el caso de R es un estigma que nos persigue y que aparece como una
de las desventajas de R. Es más, conforme superamos esa curva de aprendizaje, los que nos vamos
convirtiendo en usuarios avanzados, o incluso algunos en expertos, nos olvidamos de ella y cuando
presentamos nuestros trabajos, o tenemos que enseñarle a alguien a hacer algo con R lo hacemos
como si todo el mundo tuviera que entendernos.
Es así que en congresos especializados, como es lógico y natural dado que son especializados,
las ponencias y sobre todo los talleres o cursos suelen estar dirigidos a una audiencia con ciertos
conocimientos de R, sobre temas concretos en los que aplicar R. Sin embargo, y aunque cada vez
hay más oferta tanto en la enseñanza oficial como en instituciones privadas, lo más habitual es
que aquellos que quieren utilizar R tengan que echar mano de amigos para iniciarse, y empezar a
pelearse con R.
Este taller-curso cero pretende acercar R a aquellas personas involucradas en el análisis de datos
pero que nunca hayan utilizado R. Tampoco es necesario haber utilizado otro software estadístico,
hay muchos entornos en los que se pretende hacer análisis de datos utilizando hojas de cálculo, y
que pueden beneficiarse de un curso desde el principio para empezar a perderle el miedo a otras
cosas.
El taller cubre desde la instalación de R y RStudio hasta la generación de informes sencillos,
pasando por las explicaciones básicas del funcionamiento y componentes de R.

1
http://r-es.org/VI+Jornadas
2
Correo electrónico de contacto: emilio@lcano.com

Presentación curso / Página 3


ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio: curso ceRo de R

Ponente

Emilio López Cano

Dr. Ing. Sistemas de Información, Master Ing. de Sistemas de Decisión, Graduado en Estadís-
tica Aplicada, Diplomado en Estadística

Investigador en Universidad Rey Juan Carlos

Profesor asociado en Universidad de Castilla-La Mancha

Vocal junta directiva Comunidad R-Hispano

Vocal AENOR AEN/CTN66/SC3 Métodos Estadísticos

Formador en la Asociación Española para la Calidad (AEC)

Experto en Control Estadístico de Procesos y en el software R

Experiencia en empresas de diversos sectores

Web personal: http://emilio.lcano.com

emilio@lcano.com
+34 665 676 225

Taller
El curso se puede adaptar a cualquier duración, si bien se recomienda una duración mínima de 4
horas, idealmente ampliando a dos más para que los asistentes practiquen con sus propios datos y
se enfrenten a las posibles dudas con el apoyo del ponente.
Agenda
Jueves 24 de octubre de 2014

Lugar
CNTG (Centro de Novas Tecnoloxías de Galicia).

Requisitos
Ordenador portátil Linux, Windows o Mac con conexión a Internet. Para evitar posibles problemas
de conexión, se recomienda haber descargado los ficheros de instalación de R y RStudio desde
http://www.r-project.org y http://www.rstudio.com respectivamente. Para la generación de
informes en formato pdf es también necesario disponer de una distribución de LATEX apropiada al
sistema operativo utilizado.

Presentación curso / Página 4


ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio: curso ceRo de R

Materiales
La documentación del taller consiste en un manual en formato pdf con el contenido de las presen-
taciones que incluye también la explicación correspondiente, así como el código y las prácticas a
realizar. Se pueden proporcionar ficheros de datos o código adicionales. No es necesario imprimir
el manual para seguir el taller, se puede tener delante en el mismo ordenador donde se practica o
en una tablet. No obstante, tenerlo impreso y encuadernado es muy útil para tomar notas sobre la
explicación, aclaraciones, o ejemplos adicionales vistos durante el taller. El diseño está optimizado
para imprimir a doble cara en tamaño A4.

Modalidades
Los contenidos del taller forman parte de diversos programas formativos en los que participan los
autores con universidades y empresas. Consulta con ellos si necesitas detalles sobre las distintas
posibilidades.

Taller Jornadas R

Curso In company

Curso on-line

Seminario

Presentación curso / Página 5


Bibliografía
IcebreakeR. http://cran.r-project.org/doc/contrib/Robinson-icebreaker.pdf. Tutorial de
R.

Try R. http://tryr.codeschool.com/. Para practicar.

E. L. Cano, J. M. Moguerza, and A. Redchuk. Six Sigma with R. Statistical Engineering for Process
Improvement, volume 36 of Use R! Springer, New York, 2012. ISBN 978-1-4614-3651-5. URL
http://www.springer.com/statistics/book/978-1-4614-3651-5.

M. Crawley. The R Book. Wiley, 2012. ISBN 9781118448946. URL http://books.google.es/


books?id=ccn0eLakpboC.

P. Dalgaard. Introductory Statistics with R. Statistics and Computing. Springer, 2008. ISBN
9780387790534. URL http://books.google.es/books?id=YI0kT8cuiVUC.

A. de Vries and J. Meys. R For Dummies. –For dummies. Wiley, 2012. ISBN 9781119963134. URL
http://books.google.es/books?id=SYIVe0YbzxUC.

J. Verzani. Getting Started with RStudio. O’Reilly Media, 2011. ISBN 9781449309039. URL
http://books.google.es/books?id=q95Nyozjda4C.

Presentación curso / Página 6


1 R desde el principio
Contenido

1.1. Introducción a R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.1. Qué es R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1.2. Trabajar con R y RStudio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2. Trabajar con datos en R . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.2.1. Estructuras de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.2.2. Importación y exportación de datos . . . . . . . . . . . . . . . . . . . . . . 37
1.3. Análisis exploratorio de datos . . . . . . . . . . . . . . . . . . . . . . . . . 40
1.3.1. Resúmenes de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
1.3.2. Representación gráfica de datos . . . . . . . . . . . . . . . . . . . . . . . . . 45
1.4. Informes con RStudio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
1.4.1. Problema y enfoques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
1.4.2. Exportación de resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
1.5. Enfoque reproducible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
1.5.1. Markdown . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
1.5.2. Más opciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

© Emilio López Cano y Javier Martínez Moguerza. Licencia CC BY-NC-ND 4.0


ISBN: 978-84-7923-526-0. Ediciones del Orto.

Este libro forma parte del material didáctico utilizado por los autores en programas de formación
a pre-graduados, post-graduados y profesionales sobre el uso del software estadístico R en diversos
ámbitos. Correo electrónico de contacto: emilio.lcano@uclm.es

Capítulo 1 / Página 1
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

1.1. Introducción a R
Bienvenido al taller R desde el principio. Como veremos más adelante, R es un software estadístico
y lenguaje de programación, con el que podemos realizar infinidad de tareas. En este taller nos
centraremos en los primeros pasos para empezar a utilizar R, y perderle el miedo a una aplicación
con la cual no se interactúa mediante ventanitas y menús, sino mediante una consola y scripts de
código.
En todas esas tareas que hemos dicho que podemos hacer con R, siempre o casi siempre tenemos
que trabajar con datos. Tras seguir el taller, serás capaz de crear, acceder y modificar datos con R,
y realizar un tratamiento básico con ellos. Esto sentará las bases para una posterior profundización
en el uso de R para usos específicos, tales como optimización, estimación, visualización, etc.
Respecto a los datos, veremos en el taller cómo crear estructuras de datos desde R. También
trabajaremos con ficheros de datos de ejemplo. La estructura y formato de estos ficheros tiene una
importancia crucial al trabajar con R o con cualquier software de análisis de datos. Queda fuera
del alcance de este taller una explicación más extensa sobre los requisitos y recomendaciones para
el almacenamiento de datos.
Dicho esto, una vez tenemos los datos organizados, necesitamos los programas apropiados para
su tratamiento en la mejora de procesos. Hay una gran variedad de software comercial para el
tratamiento estadístico de datos. Las hojas de cálculo pueden ser útiles para ciertos cálculos pero a
medida que se profundiza en las técnicas estadísticas es claramente inapropiado.

Software comercial para análisis de datos

Programas

SPSS

Minitab

StatGraphics

JMP & SAS

Stata, Statistica, . . .

Cualquier paquete estadístico, incluso hojas de cálculo

Capítulo 1 / Página 3
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

1.1.1. Qué es R
El proyecto R
La alternativa al software comercial es R. R es . . .

Sistema para computación estadística: software de análisis de datos y lenguaje de programa-


ción

Ampliamente utilizado en investigación y docencia, grandes empresas lo usan: Google, Pfizer,


...

Ross Ihaka y Robert Gentleman, continuando el trabajo de los laboratorios Bell a partir del
lenguaje S

http://www.r-project.org/
La web del proyecto R, aunque austera, contiene una gran cantidad de recursos para el uso de
R. El apartado de documentación y la revista de R (The R Journal) contienen gran cantidad de
documentos generales y específicos para ciertas tareas.

Capítulo 1 / Página 4
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

http://cran.r-project.org/
Los recursos oficiales se encuentran en el repositorio CRAN (The Comprehensive R Archive
Network). Aquí es donde se descarga la aplicación para instalar, pero también dispone de otros
recursos.

Paquetes – Librerías
Las librerías aportadas por usuarios (5943 en el momento de escribir este manual) son un recurso
impresionante. Hay librerías para una gran variedad de tareas.

Task Views
Para poner un poco de orden en esta ingente cantidad de recursos, tenemos las task views, que
son una especie de recopilaciones de recursos sobre un tema concreto. Por ejemplo, si vamos a la
task view ChemPhys, encontramos recursos agrupados por subtemas relacionados con la química y
la física: libros, librerías, funciones, enlaces, . . .

Capítulo 1 / Página 5
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

CRAN no es el único repositorio. Otro repositorio oficial es Bioconductor, especializado en bioin-


formática, bioestadística, biometría, etc1 . Para poder publicar una librería en estos repositorios los
autores deben seguir unas reglas estrictas en cuanto a programación y documentación, por lo que
estos paquetes cumplen unos estándares mínimos de calidad. Algunos autores no publican los pa-
quetes en los repositorios oficiales, sino que los hacen públicos en sus propias webs o en repositorios
genéricos como github2 .
El mundo del software libre genera recelos en las empresas (algunas veces con motivos fundados).
La primera pregunta es ¿quién mantiene todo esto?

¿Cómo se mantiene R?
Los principales pilares que sustentan el proyecto R son los siguientes:

R Foundation

R Core Team

R Contributors

Institute for Statistics and Mathematics of WU (Wirtschaftsuniversität Wien, Vienna Uni-


versity of Economics and Business).

R Foundation
La fundación de R está establecida en Viena (Austria). Obtiene recursos de su propia actividad
mediante la organización de un congreso anual, pero sobre todo de sus donantes. Podemos ver
algunos específicos del mundo de R, como RStudio o Revolution Analytics, pero también algunos
muy importantes como AT&T o Google.
1
Visita por ejemplo el enlace del paquete MassSpecWavelet (http://www.bioconductor.org/packages/release/
bioc/html/MassSpecWavelet.html) para espectrometría de masas.
2
http://www.github.com

Capítulo 1 / Página 6
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

En España existe una asociación de usuarios de R (Comunidad R-Hispano). Asociarse es gratuito.


En la web de la asociación se pueden encontrar recursos en español. Uno de los más interesantes
son los videos de las reuniones del grupo de interés local de Madrid, con presentaciones de diversos
temas relacionados con R. Anualmente se celebran las Jornadas de Usuarios de R, con inscripción
gratuita, como en las sextas, o con una cuota muy reducida.

Comunidad R Hispano

http://r-es.org/

Capítulo 1 / Página 7
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

Jornadas (2014: VI jornadas, Santiago de Compostela)

Grupos locales

Grupos temáticos

Lista de correo

Twitter: @R_Hisp

1.1.2. Trabajar con R y RStudio


R3 es una aplicación de análisis estadístico y representación gráfica de datos, y además un lenguaje
de programación. R es interactivo, en el sentido de que responde a determinadas entradas que
recibe. Estas entradas son expresiones que pueden ser de diversos tipos, principalmente:

Una expresión aritmética;

Una expresión lógica;

Una llamada a una función;

Una asignación.

Si la expresión está incompleta, el intérprete de R queda a la espera hasta que la expresión se


complete. Si la expresión está completa, el intérprete la evalúa, produciendo un resultado. Este
resultado puede mostrar algunas salidas al usuario, que puede ser texto o gráficos. Algunas expre-
siones no producen ninguna salida visible, y su resultado es almacenar datos en variables, escribir
datos en disco, o cualquier otro.
R trabaja con datos en memoria, es decir, necesita tener los objetos almacenados en su espacio
de trabajo. Veremos más adelante estos detalles. Pero aunque R trabaje con los datos en memoria,
necesitaremos trabajar con ficheros de diversas formas. Las más habituales serán:

Leer ficheros de datos para utilizar en los análisis de datos.

Escribir ficheros de datos para posteriores análisis.

Guardar gráficos para incluir en informes utilizando otras herramientas.

Crear scripts de R para escribir conjuntos de expresiones que contengan un análisis completo.

Crear ficheros de informes que contengan código y texto que se puedan compilar y presentar.

Lo podemos resumir en dos: trabajar con datos, y trabajar con código. Cuando en alguna expresión
de R intervienen ficheros, se puede proporcionar la ubicación del fichero de dos formas distintas:
3
http://www.r-project.org

Capítulo 1 / Página 8
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

Mediante la ruta absoluta. Es decir, la ubicación en el disco duro del ordenador con la ruta
completa.

Mediante la ruta relativa. Es decir, la ubicación en el disco duro del ordenador a partir del
directorio de trabajo.

La infraestructura de R se compone de una serie de elementos que principalmente son los siguien-
tes:

Componentes de R

La Consola

Editor de código (scripts)

Salida gráfica

El historial

El espacio de trabajo

El directorio de trabajo

Capítulo 1 / Página 9
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

El interfaz de usuario de R (R GUI) cumple las funciones básicas para interactuar con R, pero es
muy pobre a la hora de trabajar con él. En su lugar, utilizaremos el interfaz de usuario RStudio4 ,
que es como un envoltorio del sistema R con más funcionalidades y ayudas, pero manteniendo el
mismo nivel de interacción: consola y scripts (código).

RStudio
Al igual que R, RStudio es una aplicación de software libre, pero en este caso desarrollada y
mantenida por una compañía privada. Existen versiones de pago para las cuales esta compañía
ofrece soporte y otros servicios.

Existen otro tipo de interfaces para usar R, tanto del tipo de RStudio, es decir, entornos de
desarrollo (IDE, Integrated development Environment) como interfaces gráficos de usuario (GUI,
Graphical User Interface). Estas otras opciones quedan fuera del alcance de este taller, pero se
recomienda probarlos para elegir el que mejor se adapte a las necesidades de cada uno.

Práctica 1
Instalación de R y RStudio
Sigue el guión de la práctica en el Capítulo 2 del taller.

La consola de R(Studio)
La consola de R en RStudio se encuentra en la parte inferior izquierda de la ventana del programa.
Funciona exactamente igual que en R GUI, aunque los colores pueden ser diferentes. Algunos detalles
sobre la consola en RStudio:
4
http://www.rstudio.org

Capítulo 1 / Página 10
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

Podemos situar el cursor en el símbolo de la consola > desde cualquier lugar del programa
pulsando CTRL + 2.

En la barra de título de la consola se indica el directorio de trabajo (working directory)

La flecha a la derecha del directorio de trabajo sirve para que el explorador de ficheros muestre
el directorio de trabajo.

Si empezamos a escribir y pulsamos la tecla TAB o CTRL + ESPACIO aparece un menú para
seleccionar elementos disponibles en el espacio de trabajo, como variables o funciones.

CTRL + ESPACIO dentro de una función muestra los argumentos posibles.

CTRL + ESPACIO dentro de comillas muestra los ficheros del directorio de trabajo.

La tecla ESC cancela la expresión actual.

CTRL + L limpia la consola.

En la consola podemos introducir expresiones que son evaluadas una a una.

1 + 1

## [1] 2

x <- log(pi)

Capítulo 1 / Página 11
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

Funciones
Una expresión de R puede ser una llamada a una función, de hecho es la expresión que más utili-
zamos. La llamada a una función es siempre igual: el nombre de la función más (obligatoriamente)
paréntesis de apertura y cierre, y dentro de los paréntesis, los argumentos de la función separados
por comas. Los argumentos de las funciones se pueden declarar de varias formas:

Por el orden en el que están definidos en la propia función;

Por el nombre con el que están definidos en la propia función. R tiene una característica
llamada partial matching que permite escribir sólo el principio del nombre;

Utilizar su valor predeterminado. Algunos parámetros de funciones tienen un valor predeter-


minado. Si no proporcionamos uno distinto, es el que se utiliza.

Podemos ver los argumentos de una función mediante la función str o el atajo de teclado en RStudio
mencionado anteriormente. Es obligatorio usar paréntesis aunque la función no requiera argumentos.

log(pi)

## [1] 1.14473

str(log)

## function (x, base = exp(1))

log()

## Error in eval(expr, envir, enclos): el argumento "x" está ausente, sin valor por
omisión

seq()

## [1] 1

seq

## function (...)
## UseMethod("seq")
## <bytecode: 0x6d17810>
## <environment: namespace:base>

Capítulo 1 / Página 12
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

Práctica 2
Empezando con R
Sigue el guión de la práctica en el Capítulo 2 del taller.

El editor de código
En el editor de código creamos ficheros de texto donde escribimos expresiones de R. Las expresio-
nes pueden ocupar una o varias líneas. De hecho cuando las expresiones son muy largas es preferible
usar varias líneas para que se lean mejor. Se puede escribir más de una expresión en la misma línea
si las separamos con punto y coma (;). Se pueden incluir también comentarios en el código mediante
el carácter #. Los ficheros de código de R, o scripts, tienen extensión .R. El motivo de utilizar scripts
es reutilizar el código que escribimos una vez y normalmente utilizamos de manera rutinaria en los
análisis de datos.
El editor de código de RStudio tiene las siguientes mejoras y ayudas con respecto al editor de R
GUI:

Sintaxis coloreada. Los distintos tipos de elementos aparecen de color diferente: funciones,
objetos, números, texto, . . .

CTRL + ESPACIO y tab: Misma funcionalidad que en la consola.

Podemos ejecutar scripts completos desde la consola o desde otros scripts. Por ejemplo, si tenemos
un script llamado rutina.R que hace operaciones rutinarias que queremos utilizar en otros scripts
(por ejemplo cargar librerías necesarias, cargar datos, . . . ) lo ejecutamos con el siguiente código.

Capítulo 1 / Página 13
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

source("rutina.R")

CTRL + 1

Run

Source

Ayudas: TAB o CTRL + ESPACIO

Expresiones

En la misma línea con ;

Comentarios con #

La salida gráfica
El editor de código de RStudio tiene las siguientes mejoras y ayudas con respecto al editor de R
GUI:

Exportación en varios formatos

Navegación por el histórico de gráficos por defecto

Zoom

Capítulo 1 / Página 14
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

El historial
Se puede acceder al historial desde la consola simplemente utilizando las flechas arriba y abajo.
En RStudio, además, podemos ver todo el historial en una pestaña específica, y realizar otras
operaciones como guardar, abrir, o pasar líneas a la consola o al código.

Guardar, recuperar, búsqueda, . . .

El espacio de trabajo (workspace)


Los objetos que vamos creando en R se almacenan en el espacio de trabajo. Podemos acceder
a ellos fácilmente en RStudio mediante la pestaña Environment. Además de nuestro espacio de
trabajo (Global Environment) cada librería cargada tiene su propio espacio de trabajo. El espacio
de trabajo se puede limpiar, guardar y recuperar. También es posible importar un fichero de datos
mediante un cuadro de diálogo.

Capítulo 1 / Página 15
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

Limpiar, guardar, recuperar, búsqueda, importar

El espacio de trabajo – funciones


A medida que se domina el manejo de R y se empiezan a hacer operaciones más sofisticadas con R,
algunas veces se necesita consultar el espacio de trabajo mediante código. Las siguientes funciones
son de las más utilizadas.

## Listado de objetos
# ls()

## Estructura de un objeto
str(mivariable)

## num [1:50] -0.66 2.919 0.677 -0.684 0.186 ...

ls Obtiene la relación de objetos en el espacio de trabajo


str Obtiene la estructura de un objeto en el espacio de trabajo

El directorio de trabajo
Una sesión de R tiene asignado un directorio de trabajo para aquellas tareas relacionadas con
ficheros en disco. Por ejemplo, para trabajar con datos, trabajar con código, o exportar gráficos.
Cuando en alguna expresión de R intervienen ficheros, se puede proporcionar la ubicación del fichero
de dos formas distintas:
Mediante la ruta absoluta. Es decir, la ubicación en el disco duro del ordenador con la ruta
completa.
Mediante la ruta relativa. Es decir, la ubicación en el disco duro del ordenador a partir del
directorio de trabajo.
Una ayuda importante con RStudio es que podemos acceder a los ficheros y carpetas del direc-
torio de trabajo desde la consola o desde el editor de código pulsando la combinación de teclas
CTRL + ESPACIO estando el cursor dentro de comillas.
Además, en la pestaña Files disponemos de un explorador de archivos que podemos vincular al
directorio de trabajo mediante la flecha en la barra de título de la consola. La operación inversa
también es posible: buscamos una carpeta mediante el icono . . . arriba a la derecha, y a continuación
seleccionamos “Set as working directory” en el icono More. Otras opciones son crear carpetas, copiar,
mover, cambiar nombre, o abrir la carpeta con el explorador de archivos en una nueva ventana. Por
último, también es posible establecer como directorio de trabajo el que contiene un script abierto
en el editor de código, mediante el menú Session.
En las opciones globales de RStudio se puede configurar el directorio de trabajo por defecto al
abrir la aplicación.

Capítulo 1 / Página 16
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

Ayudas: TAB o CTRL + ESPACIO


Buscar carpeta
Establecer wd
Mostrar wd
Manejar ficheros

El directorio de trabajo – funciones


Aunque se utiliza mucho el interfaz de usuario para trabajar con ficheros y con el directorio
de trabajo, una vez establecidas unas pautas de trabajo se trabaja con código. Una práctica muy
extendida es fijar como una de las primeras instrucciones en los scripts que se utilizan el directorio
de trabajo.

## Obtener el directorio de trabajo


getwd()

## [1] "/home/emilio/R-projects/cursos/content/6_r-es_taller"

## Establecer el directorio de trabajo


setwd("../../scripts")

## Obtener una lista de ficheros en el directorio de trabajo


dir()

## [1] "3" "config.R" "cortapega"


## [4] "functions.R" "generarContenido.R" "pmap.R"

Capítulo 1 / Página 17
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

IMPORTANTE: En R, el carácter \ no se puede utilizar tal cual. Por lo tanto, para indicar las
rutas de ficheros en Windows, tenemos que utilizar la barra normal (/), o bien poner doble barra
invertida (\\) para separar directorios. Esto es importante cuando copiamos y pegamos una ruta
del explorador de archivos de Windows.

## Correcto:
setwd("C:/micodigo")
setwd("C:\\micodigo")

## Incorrecto:
setwd("C:\micodigo")

getwd Obtiene el directorio de trabajo actual

dir Obtiene la lista de archivos del directorio de trabajo actual

setwd Establece el directorio de trabajo de la sesión

Librerías y paquetes
La funcionalidad de R se organiza en librerías que contienen paquetes (packages). R puede tener
varias librerías, dentro de estas librerías se instalan los paquetes, que después se pueden cargar. Al
abrir R, los paquetes base se cargan automáticamente y están disponibles. Para utilizar funciones
de otros paquetes, por ejemplo el paquete qcc para gráficos de control de calidad, es necesario cargar
el paquete en la sesión. Por otra parte, para poder cargar un paquete tiene que estar instalado en
el sistema. Podemos realizar estas opciones con el interfaz gráfico de RStudio.

Instalar: Install

Capítulo 1 / Página 18
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

Cargar: marcar casilla

Buscar

Ayuda

Librerías y paquetes – funciones


La instalación, actualización y eliminación de paquetes es más cómoda desde el interfaz gráfico.
Sin embargo, para cargar paquetes una vez establecemos la rutina, lo normal es cargarlas al principio
del script, a menos que estemos haciendo pruebas o aprendiendo.

## Cargar paquete
library("qcc")

## Instalar paquete
install.packages("qcc")
## Desinstalar paquete
remove.packages("qcc")
## Desconectar paquete
detach("package:qcc", unload = TRUE)

## Consultar rutas a las librerías


.libPaths()

Ayuda
Hay muchas formas de encontrar ayuda en RStudio:

El atajo CTRL + ESPACIO dentro de una función realmente muestra la documentación básica
de esa función.

Pulsando la tecla F1 con el cursor situado sobre el nombre una función o cualquier otro objeto
de R con documentación, por ejemplo un conjunto de datos.

El atajo CTRL+3 nos lleva a la pestaña Help de RStudio

Mediante la caja de búsqueda en la pestaña de ayuda

Navegando en la pestaña de ayuda

Un tipo de documento especial son las llamadas Vignettes, que pueden incluir ejemplos y expli-
caciones más extensas.

Capítulo 1 / Página 19
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

CTRL+3

Tecla F1

Búsqueda

Viñetas

Web

Ejemplos y demos

Ayuda – funciones

## Buscar nombres de funciones


apropos("qcc.")
## Ayuda de una función
?qcc
help("qcc")
## Búsqueda general
??group
## Viñetas
vignette("HelicopterInstructions", "SixSigma")
## Ejemplos
example(boxplot)
## Demos
demo(graphics)
demo() ## Lista de demos disponibles

Capítulo 1 / Página 20
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

Práctica 3
Más fácil con RStudio
Sigue el guión de la práctica en el Capítulo 2 del taller.

1.2. Trabajar con datos en R


1.2.1. Estructuras de datos
En R los datos de una variable pueden ser de un tipo determinado, por ejemplo números o texto.
Estas variables pueden a su vez estar integradas en otras estructuras. La forma más simple es en
forma de vector para una sola variable. Las matrices son vectores con más de una dimensión. Las
listas pueden contener objetos de distinto tipo y longitud. Los objetos de tipo data.frame contienen
variables de distinto tipo con el mismo número de observaciones.

Clases y tipos
Estructuras

vector Conjunto de datos del mismo tipo

matrix Vector organizado en filas y columnas

list Lista de objetos

data.frame Conjunto de datos en filas y columnas

Clases

numeric Número real

integer Número entero

character Cadena de texto

factor Categorías

logical Verdadero/Falso

POSIXct, Date Fecha

Capítulo 1 / Página 21
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

Crear vectores
Podemos crear vectores introduciendo todos sus elementos, o generando secuencias. El operador
‘:’ (dos puntos) entre dos números enteros genera una secuencia de números enteros entre ambos.
También se puede crear un vector introduciendo los datos uno a uno en la consola mediante la
función ‘scan’.

x1 <- c(10, 20, 30); x1

## [1] 10 20 30

x2 <- 1:10; x2

## [1] 1 2 3 4 5 6 7 8 9 10

x3 <- seq(0, 1, 0.1); x3

## [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0

x4 <- c(rep("IBERICO", 3), rep("SERRANO", 2)); x4

## [1] "IBERICO" "IBERICO" "IBERICO" "SERRANO" "SERRANO"

x5 <- seq_along(x4); x5

## [1] 1 2 3 4 5

Más vectores
Además de vectores numéricos y de texto, podemos crear vectores con valores lógicos o factores
(variables categóricas).

## x <- scan()
miFactor <- factor(1:5, labels = letters[1:5]); miFactor
## [1] a b c d e
## Levels: a b c d e
factorNiveles <- gl(5, 3, labels = letters[1:5]); factorNiveles
## [1] a a a b b b c c c d d d e e e
## Levels: a b c d e
vectorLogico <- 1:10 > 5; vectorLogico
## [1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE

Capítulo 1 / Página 22
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

c Combina elementos

seq, seq_along Crea secuencias ordenadas

rep Replica valores

letters Objeto que contiene todas las letras

factor Crea un vector de tipo factor (categórico)

gl Crea un vector con los niveles de un factor

scan Lee los valores de un vector uno a uno de la consola

Vectores: longitud y nombres


La longitud del vector se puede obtener con la función ‘length’. Podemos asignar nombres a cada
elemento del vector. Los vectores están indexados, y podemos acceder a ellos mediante su índice o
su nombre. El acceso a objetos indexados se realiza mediante los corchetes ‘[ ]’. Esta selección puede
ser de múltiples elementos. En R es de especial importancia la selección de elementos de un vector
(o una lista) mediante vectores lógicos. Si dentro de los corchetes incluimos un vector lógico de la
misma longitud que el vector original, el resultado será un vector con los elementos cuyo índice es
verdadero en el vector lógico.

names(x1) <- c("semana1", "semana2", "semana3")


x1

## semana1 semana2 semana3


## 10 20 30

length(x1)

## [1] 3

1:length(x1)

## [1] 1 2 3

Selección en vectores

x1[1]

## semana1
## 10

Capítulo 1 / Página 23
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

x1["semana1"]

## semana1
## 10

x1[c(1,3)]

## semana1 semana3
## 10 30

x1[-c(1)]

## semana2 semana3
## 20 30

Selección lógica

x1 >= 15

## semana1 semana2 semana3


## FALSE TRUE TRUE

x1[x1 >= 15] # Equivale a x1[c(2, 3)

## semana2 semana3
## 20 30

x4[x4 != "IBERICO"]

## [1] "SERRANO" "SERRANO"

x4[x4 == "IBERICO"]

## [1] "IBERICO" "IBERICO" "IBERICO"

Ordenación
Hay dos funciones relacionadas con el orden de los elementos de un vector, con una obtenemos el
vector ordenado, y con la otra obtenemos los índices que ocupan los valores ordenados, es decir, el
primer elemento del vector es el índice del mínimo valor, y así sucesivamente. Se puede invertir el
orden con la función rev.

Capítulo 1 / Página 24
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

x6

## [1] 1 6 6 6 8 6 0 2 6 5

sort(x6)

## [1] 0 1 2 5 6 6 6 6 6 8

rev(sort(x6))

## [1] 8 6 6 6 6 6 5 2 1 0

order(x6)

## [1] 7 1 8 10 2 3 4 6 9 5

Operaciones con vectores


Se pueden realizar dos tipos de operaciones con vectores: operaciones sobre todo el vector que
devuelven un solo valor, y operaciones sobre cada elemento del vector que devuelven otro vector de
la misma longitud. Las operaciones aritméticas sobre un vector realmente son operaciones entre dos
vectores. Si no tienen la misma longitud, R recicla los valores del más pequeño hasta completar la
longitud del más grande. Si la longitud del más grande no es múltiplo de la longitud del más corto,
se realiza la operación pero lanza un mensaje de advertencia (warning). Además de operaciones
aritméticas, cuando un vector es argumento de una función, el resultado puede ser igualmente un
solo valor o un vector.

x1

## semana1 semana2 semana3


## 10 20 30

x1 + 2

## semana1 semana2 semana3


## 12 22 32

x2

## [1] 1 2 3 4 5 6 7 8 9 10

x5

Capítulo 1 / Página 25
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

## [1] 1 2 3 4 5

x2 + x5

## [1] 2 4 6 8 10 7 9 11 13 15

Operaciones con vectores

x1 + x3

## Warning in x1 + x3: longitud de objeto mayor no es múltiplo de la longitud de uno


menor

## [1] 10.0 20.1 30.2 10.3 20.4 30.5 10.6 20.7 30.8 10.9 21.0

mean(x1)

## [1] 20

sqrt(x1)

## semana1 semana2 semana3


## 3.162278 4.472136 5.477226

Creación y acceso a matrices

miMatriz <- matrix(c(10, 20, 30, 40, 12, 26, 34, 39),
nrow = 4, ncol = 2); miMatriz

## [,1] [,2]
## [1,] 10 12
## [2,] 20 26
## [3,] 30 34
## [4,] 40 39

miMatriz[1, ]

## [1] 10 12

miMatriz[, 1]

Capítulo 1 / Página 26
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

## [1] 10 20 30 40

miMatriz[3, 2]

## [1] 34

Más matrices
Podemos asignar nombres a las filas y columnas de una matriz, y realizar cálculos sobre filas o
columnas

colnames(miMatriz) <- c("variable1", "variable2")


rownames(miMatriz) <- c("caso1", "caso2", "caso3", "caso4")
miMatriz

## variable1 variable2
## caso1 10 12
## caso2 20 26
## caso3 30 34
## caso4 40 39

rowSums(miMatriz)

## caso1 caso2 caso3 caso4


## 22 46 64 79

colMeans(miMatriz)

## variable1 variable2
## 25.00 27.75

colnames, rownames, dimnames Obtiene o establece nombres de filas y/o columnas de una matriz

rowSums, colSums Obtiene un vector con la suma por filas o por columnas de una matriz

rowMeans, colMeans Obtiene un vector con las medias por filas o por columnas de una matriz

Creación de listas
Las listas se pueden crear introduciendo sus elementos, que pueden ser otros objetos ya creados.
Las listas también están indexadas y se puede acceder a sus elementos por índice o por nombre. En
este caso, el acceso por nombre se puede hacer mediante el operador ‘$’.

Capítulo 1 / Página 27
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

miLista <- list(matriz = miMatriz, vector1 = x1, x2); miLista

## $matriz
## variable1 variable2
## caso1 10 12
## caso2 20 26
## caso3 30 34
## caso4 40 39
##
## $vector1
## semana1 semana2 semana3
## 10 20 30
##
## [[3]]
## [1] 1 2 3 4 5 6 7 8 9 10

Acceso a listas

miLista$vector1

## semana1 semana2 semana3


## 10 20 30

miLista[[1]]

## variable1 variable2
## caso1 10 12
## caso2 20 26
## caso3 30 34
## caso4 40 39

miLista["vector1"]

## $vector1
## semana1 semana2 semana3
## 10 20 30

miLista[3]

## [[1]]

Capítulo 1 / Página 28
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

## [1] 1 2 3 4 5 6 7 8 9 10

miLista$matriz[, 2]

## caso1 caso2 caso3 caso4


## 12 26 34 39

La diferencia entre los corchetes simples y dobles es que los dobles devuelven el objeto original
dentro de la lista (por ejemplo, un vector), mientras que el corchete simple devuelve una lista
que contiene los elementos de la selección. Vemos que también podemos acceder directamente a
un elemento del objeto que hay dentro de la lista, por ejemplo una fila de la matriz en el primer
elemento de la lista.

Crear conjuntos de datos (data.frame)


Aunque lo normal será que importemos los datos de ficheros csv como veremos en el siguiente
apartado, algunas veces necesitaremos crear nuestras propias tablas de datos. Podemos obtener la
estructura del conjunto de datos y el número de filas.

misDatos <- data.frame(tipo = c("A", "A", "B", "C", "C", "C"),


peso = c(10, 20, 15, 13, 23, 8)); misDatos

## tipo peso
## 1 A 10
## 2 A 20
## 3 B 15
## 4 C 13
## 5 C 23
## 6 C 8

str(misDatos)

## ’data.frame’: 6 obs. of 2 variables:


## $ tipo: Factor w/ 3 levels "A","B","C": 1 1 2 3 3 3
## $ peso: num 10 20 15 13 23 8

nrow(misDatos)

## [1] 6

Acceso a datos

Capítulo 1 / Página 29
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

Una vez tenemos un objeto de tipo data.frame, podemos acceder a sus filas y columnas de la
misma forma que una matriz, y a las columnas(variables) de la misma manera que a las listas. Aquí
vemos la aplicación de la selección mediante vectores lógicos.

misDatos$peso

## [1] 10 20 15 13 23 8

misDatos[3, ]

## tipo peso
## 3 B 15

misDatos$peso < 15

## [1] TRUE FALSE FALSE TRUE FALSE TRUE

misDatos[misDatos$peso < 15, ]

## tipo peso
## 1 A 10
## 4 C 13
## 6 C 8

Ordenación, subconjuntos y subtotales


Podemos obtener subtotales y subconjuntos del conjunto de datos con las siguientes funciones.
El primer argumento de la función aggregate es una fórmula. Las fórmulas en R consisten en dos
expresiones una a cada lado del símbolo ~. En el ejemplo, le estamos pidiendo la media (tercer
argumento) de la variable peso para cada valor de la variable tipo, dentro del conjunto de datos
misDatos. Podemos ordenar un conjunto de datos por columnas mediante la función order vista
anteriormente.

subset(misDatos, peso < 15)

## tipo peso
## 1 A 10
## 4 C 13
## 6 C 8

aggregate(peso ~ tipo, data = misDatos, mean)

Capítulo 1 / Página 30
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

## tipo peso
## 1 A 15.00000
## 2 B 15.00000
## 3 C 14.66667

misDatos[order(misDatos$peso), ]

## tipo peso
## 6 C 8
## 1 A 10
## 4 C 13
## 3 B 15
## 2 A 20
## 5 C 23

list Crea una lista

data.frame Crea un conjunto de datos

subset Obtiene un subconjunto de datos de un objeto data.frame

aggregate Crea un conjunto de datos con subtotales de un objeto data.frame

Modificar conjuntos de datos


Para añadir una nueva columna, simplemente asignamos un vector de la misma longitud que el
resto a un nuevo nombre de columna. De igual forma podemos sustituir una columna por nuevos
valores, o eliminarla asignando el valor NULL.

misDatos$prueba <- NA; misDatos

## tipo peso prueba


## 1 A 10 NA
## 2 A 20 NA
## 3 B 15 NA
## 4 C 13 NA
## 5 C 23 NA
## 6 C 8 NA

misDatos$prueba <- NULL; misDatos

Capítulo 1 / Página 31
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

## tipo peso
## 1 A 10
## 2 A 20
## 3 B 15
## 4 C 13
## 5 C 23
## 6 C 8

Columnas calculadas

misDatos$mitad <- misDatos$peso/sum(misDatos$peso)


misDatos$suma <- misDatos$peso + misDatos$mitad
misDatos

## tipo peso mitad suma


## 1 A 10 0.11235955 10.112360
## 2 A 20 0.22471910 20.224719
## 3 B 15 0.16853933 15.168539
## 4 C 13 0.14606742 13.146067
## 5 C 23 0.25842697 23.258427
## 6 C 8 0.08988764 8.089888

Nombres en objetos data.frame


Los objetos de tipo data.frame tienen automáticamente nombres de columnas y nombres de filas.
Los nombres de columnas son los nombres de las variables al crear o importar el conjunto de datos.
Los nombres de filas por defecto son los índices que identifican cada fila. Se pueden asignar nuevos
nombres tanto a las columnas, es decir, renombrar variables, como a las filas.

colnames(misDatos)

## [1] "tipo" "peso" "mitad" "suma"

colnames(misDatos)[4] <- "miSuma"


rownames(misDatos)

## [1] "1" "2" "3" "4" "5" "6"

rownames(misDatos) <- paste("caso", rownames(misDatos), sep = "_")


misDatos

Capítulo 1 / Página 32
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

## tipo peso mitad miSuma


## caso_1 A 10 0.11235955 10.112360
## caso_2 A 20 0.22471910 20.224719
## caso_3 B 15 0.16853933 15.168539
## caso_4 C 13 0.14606742 13.146067
## caso_5 C 23 0.25842697 23.258427
## caso_6 C 8 0.08988764 8.089888

colnames Obtiene o asigna nombres de columnas

rownames Obtiene o asigna nombres de filas

dimnames Obtiene o asigna nombres de filas y columnas (o más dimensiones en arrays)

Valores faltantes
El tratamiento de valores faltantes es muy importante para el análisis de datos, especialmente
en la fase de limpieza de datos. Los valores faltantes o perdidos se representan en R mediante
NA (not available). Si intentamos hacer cálculos sobre vectores que contienen NAs, por ejemplo la
media, obtendremos NA a menos que incluyamos el argumento na.rm = TRUE. En algunas ocasiones
querremos imputar a los valores NA otro valor, por ejemplo porque si no está el valor significa que
es cero.

x <- c(1, 3, NA, 5, 6)


mean(x)

## [1] NA

mean(x, na.rm = TRUE)

## [1] 3.75

x[is.na(x)] <- 0; x

## [1] 1 3 0 5 6

mean(x)

## [1] 3

Capítulo 1 / Página 33
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

Otros valores especiales


En R disponemos además de algunos valores especiales y constantes que se muestran a continua-
ción.

NULL

## NULL

1/0

## [1] Inf

sqrt(-1)

## Warning in sqrt(-1): Se han producido NaNs

## [1] NaN

1i

## [1] 0+1i

pi

## [1] 3.141593

Otros valores especiales

letters

## [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q"
## [18] "r" "s" "t" "u" "v" "w" "x" "y" "z"

LETTERS

## [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q"
## [18] "R" "S" "T" "U" "V" "W" "X" "Y" "Z"

month.name

## [1] "January" "February" "March" "April" "May"


## [6] "June" "July" "August" "September" "October"
## [11] "November" "December"

Capítulo 1 / Página 34
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

month.abb

## [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov"
## [12] "Dec"

Conversión entre tipos de datos


Al crear objetos, R intentará deducir el tipo de datos que contiene (numérico, texto, . . . ) y su clase
(data.frame, factor, . . . ). Se pueden convertir estructuras de datos de un tipo a otro. Si existiera
algún problema, R lo intenta solucionar. Por ejemplo, si tenemos un vector de cadenas de texto
donde hay números pero también alguna cadena extraña, los textos correspondientes a números
los convierte en números y las cadenas que no puede convertir las convierte en valores faltantes.
Podemos consultar la clase de un determinado objeto con la función class, o comprobar si es de
un determinado tipo.

x <- c("1", "2", "tres")


str(x)

## chr [1:3] "1" "2" "tres"

y <- as.numeric(x)

## Warning: NAs introducidos por coerción

str(y)

## num [1:3] 1 2 NA

class(y)

## [1] "numeric"

is.numeric(y)

## [1] TRUE

Trabajar con fechas


Los ficheros de texto almacenan números y cadenas de texto. Las fechas por tanto son consideradas
como cadenas de texto o como factores, y para que R entienda que es una fecha, hay que transformar
la variable. Cuando tenemos datos con fechas, además, puede ser útil tener columnas con el año, el
mes, el año-mes y la semana para realizar análisis de datos secuenciales y por grupos de fechas.

Capítulo 1 / Página 35
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

str(vectorfechas)

## chr [1:100] "30/09/2011" "28/09/2011" "28/09/2011" "29/09/2011" ...

table(vectorfechas)

## vectorfechas
## 01/11/2011 02/11/2011 03/10/2011 03/11/2011 04/10/2011 04/11/2011
## 4 2 2 2 8 1
## 05/10/2011 05/11/2011 06/11/2011 12/11/2011 13/11/2011 16/10/2011
## 1 1 2 1 1 2
## 17/10/2011 18/10/2011 19/10/2011 22/10/2011 23/10/2011 24/10/2011
## 5 3 2 9 20 9
## 25/10/2011 28/09/2011 28/10/2011 29/09/2011 30/09/2011 30/10/2011
## 6 4 1 5 4 3
## 31/10/2011
## 2

vectorfechas <- as.Date(vectorfechas, format("%d/%m/%Y"))

Trabajar con fechas

vectornumeromes <- format(vectorfechas, "%m")


table(vectornumeromes)

## vectornumeromes
## 09 10 11
## 13 73 14

vectormes <- format(vectorfechas, "%Y-%m")


table(vectormes)

## vectormes
## 2011-09 2011-10 2011-11
## 13 73 14

vectordiasemana <- format(vectorfechas,"%A")


table(vectordiasemana)

## vectordiasemana
## domingo jueves lunes martes miércoles sábado viernes
## 28 7 18 21 9 11 6

Capítulo 1 / Página 36
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

Trabajar con fechas – semanas


Para trabajar con semanas, es preferible cargar la librería ISOweek ya que por defecto el formato
no devuelve la semana de acuerdo al estándar.

library(ISOweek)
vectorsemana <- ISOweek(vectorfechas)
table(vectorsemana)

## vectorsemana
## 2011-W39 2011-W40 2011-W41 2011-W42 2011-W43 2011-W44 2011-W45
## 13 11 2 39 19 14 2

1.2.2. Importación y exportación de datos


En este apartado vamos a ver cómo pasamos los datos de los ficheros al espacio de trabajo de
R para trabajar con ellos. R puede trabajar con un gran número de formatos de ficheros, cuya
revisión exhaustiva queda fuera del alcance de este taller. Nos centraremos en un tipo de ficheros:
los ficheros CSV. Este tipo de ficheros tienen la ventaja de que se pueden modificar fácilmente con
cualquier aplicación de hoja de cálculo, se almacenan como ficheros de texto, y se pueden generar
con prácticamente cualquier aplicación.
Si ya tenemos un fichero CSV dentro de una carpeta de nuestro directorio de trabajo, por ejemplo
practica, podemos importarlo utilizando el asistente de RStudio.

Importación con RStudio

Capítulo 1 / Página 37
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

El asistente detecta si el fichero contiene encabezados o no (heading), cuáles son los caracteres
separador (separator), símbolo decimal y las comillas. Se muestran el texto del fichero y debajo
cómo quedará el conjunto de datos tras la importación. Una vez importado, RStudio muestra el
conjunto de datos en el visualizador de datos.

Visualización de conjunto de datos

Importación y exportación – funciones


El uso del asistente está bien al principio y para probar ficheros de los que no estamos seguros de
su estructura. Una vez tenemos una pauta fijada, lo normal será incluir en nuestro script el código
para importar y exportar ficheros. Podemos ver que realmente el asistente de RStudio ha creado un
par de expresiones en la consola al usar el asistente.

ejDatos <- read.csv("practica/ejdatos.csv", sep=";", dec=",")


View(datospeso)

La primera expresión importa el fichero y asigna los datos a un objeto data.frame con el mismo
nombre que el conjunto de datos, mientras que la segunda visualiza los datos. La función base para
importar ficheros de texto es read.table. read.csv y read.csv2 son versiones simplificadas. Por
defecto, read.csv2 utiliza las opciones de exportación de Excel en español, por lo que podemos
usar simplemente la siguiente expresión.

ejDatos <- read.csv2("practica/ejdatos.csv")

Una vez importados los datos, ya están en el espacio de trabajo y podemos trabajar directamente
con ellos. Por ejemplo, podemos obtener un resumen de la variable merma.

Capítulo 1 / Página 38
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

summary(ejDatos$merma)

## Min. 1st Qu. Median Mean 3rd Qu. Max. NA’s


## 3.429 4.378 5.037 4.943 5.377 7.775 1

Tenemos un valor perdido. Supongamos que ese dato existe, pero por alguna razón no ha llegado
al fichero de datos. Primero querremos ver a qué observación se refiere ese valor perdido.

ejDatos[is.na(ejDatos$merma), ]

## maquina merma manchas defecto defecto2 temp


## 4 maquina1 NA 8 Sí 1 77.15387

Es la observación 4. Buscamos el origen del problema y encontramos que nos saltamos el dato de
la observación número 4 al meterlo en la hoja de cálculo (supongamos que el dato es 0.1879618).

Limpieza de datos y exportación


Tenemos dos opciones: ir al fichero, meterlo y volver a importar el fichero, o modificar el conjunto
de datos en R, y guardar el fichero CSV corregido. Esto es sólo un ejemplo de los problemas
que pueden surgir con los datos. Debemos documentar el código con lo que hacemos para futura
referencia.

## Guardar fichero original para mantener historia


write.csv2(ejDatos, "practica/ejdatos_ori.csv", row.names = FALSE)
## corregir el dato faltante
## Incluir comentarios sobre lo que se ha hecho
ejDatos$merma[4] <- 0.1879618
## Guardar el fichero limpio con el que trabajaremos
write.csv2(ejDatos, "practica/ejdatos_limpio.csv", row.names = FALSE)

summary(ejDatos$merma)

## Min. 1st Qu. Median Mean 3rd Qu. Max.


## 0.188 4.342 5.026 4.896 5.377 7.775

read.csv2 Importa un fichero CSV con formato de numeración español

write.csv2 Guarda un fichero CSV con formato de numeración español

rbind Une las filas de dos conjuntos de datos. Tienen que tener el mismo número y nombres de
columnas

Capítulo 1 / Página 39
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

cbind Une las columnas de dos conjuntos de datos. Si no tienen el mismo número de filas se reciclan
los valores.

Otras formas de importar datos


A modo de referencia, estas son algunas opciones más para importar datos en R. En el caso
de la importación desde la red, podemos tener ficheros de datos en un servidor privado de la
empresa. También se podrían importar desde Internet, por ejemplo si estuvieran publicados en
algún sitio los precios medios de la leche en origen o datos similares de interés. Existe un manual
en la documentación incluida con R dedicado a este tema (‘R Data Import/Export Manual’)

Paquete foreign: Minitab, S, SAS, SPSS, Stata, o Systat, entre otros;

Paquete RODBC: Open Database Connectivity (ODBC) sources, incluyendo Microsoft SQL
Server, Access, MySQL, PostgreSQL, Oracle e IBM DB2;

Los paquetes RMySQL, RSQLite, y RPostgreSQL manejan sus correspondientes sistemas de


bases de datos;

ROracle RJDBC para bases de datos Oracle y Java;

Paquete XML para ficheros XML;

El paquete XLConnect puede leer y escribir ficheros Microsoft5

Con las funciones download.file y url podemos obtener ficheros desde la red

Práctica 4
Trabajar con datos
Sigue el guión de la práctica en el Capítulo 2 del taller.

1.3. Análisis exploratorio de datos


1.3.1. Resúmenes de datos
Vamos a trabajar con un fichero de ejemplo anterior. Después de importar los datos, lo primero
que podemos hacer es comprobar el número de filas y columnas, así como el tipo de cada variable.
Podemos utilizar la función str.
5
Hay más paquetes para trabajar con ficheros excel, visita http://www.thertrader.com/2014/02/11/
a-million-ways-to-connect-r-and-excel/.

Capítulo 1 / Página 40
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

Explorar variables

ejDatos <- read.csv2("practica/ejdatos_limpio.csv")


str(ejDatos)

## ’data.frame’: 100 obs. of 6 variables:


## $ maquina : Factor w/ 2 levels "maquina1","maquina2": 1 1 1 1 1 1 1 1 1 1 ...
## $ merma : num 5.377 6.007 4.822 0.188 3.892 ...
## $ manchas : int 4 8 8 8 10 8 2 5 8 7 ...
## $ defecto : Factor w/ 2 levels "No","Sí": 2 2 1 2 1 2 1 1 1 1 ...
## $ defecto2: int 1 1 0 1 0 1 0 0 0 0 ...
## $ temp : num 68.1 77.7 61.8 77.2 50.8 ...

Explorar variables
La función str nos proporciona los primeros valores de cada variable, pero estos se ven mejor con
la función head (tail para los últimos).

head(ejDatos)

## maquina merma manchas defecto defecto2 temp


## 1 maquina1 5.3766555 4 Sí 1 68.07166
## 2 maquina1 6.0071773 8 Sí 1 77.66088
## 3 maquina1 4.8224328 8 No 0 61.84554
## 4 maquina1 0.1879618 8 Sí 1 77.15387
## 5 maquina1 3.8915628 10 No 0 50.76280
## 6 maquina1 5.3791981 8 Sí 1 70.65267

tail(ejDatos)

## maquina merma manchas defecto defecto2 temp


## 95 maquina2 5.912731 6 Sí 1 75.92650
## 96 maquina2 3.676500 7 No 0 48.92661
## 97 maquina2 4.227713 8 No 0 54.95065
## 98 maquina2 5.136236 7 Sí 1 68.69299
## 99 maquina2 5.702205 5 Sí 1 74.17696
## 100 maquina2 3.896857 9 No 0 53.58649

str obtenemos el número de filas y columnas, tipo de datos y los primeros valores de cada variable.
head Se obtienen las primeras filas del conjunto de datos
tail Se obtienen las últimas filas del conjunto de datos

Capítulo 1 / Página 41
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

Tablas de frecuencias
Para variables categóricas, es inmediato obtener una tabla con el número de observaciones para
cada categoría. Para variables numéricas, tenemos que crear los intervalos previamente, o utilizar
los que devuelve el histograma.

table(ejDatos$defecto)

##
## No Sí
## 48 52

table(cut(ejDatos$merma, breaks = 5))

##
## (0.18,1.71] (1.71,3.22] (3.22,4.74] (4.74,6.26] (6.26,7.78]
## 1 0 39 57 3

Tablas de frecuencias

datoshist <- hist(ejDatos$merma, plot = FALSE)


data.frame(marcaclase = datoshist$mids, frecuencia = datoshist$counts)

## marcaclase frecuencia
## 1 0.5 1
## 2 1.5 0
## 3 2.5 0
## 4 3.5 12
## 5 4.5 36
## 6 5.5 42
## 7 6.5 8
## 8 7.5 1

table Crea una tabla con el número de observaciones por categoría

cut Crea una variable categórica agrupando valores de una variable numérica

hist Además de obtener un histograma, devuelve los datos para construirlo

Capítulo 1 / Página 42
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

Medidas de posición central


Disponemos de funciones para calcular la media y la mediana. Para calcular la moda tendríamos
que crear primero una tabla de frecuencias como hemos hecho más arriba, y después buscar el mayor
que se corresponde con la mayor frecuencia.

mean(ejDatos$merma)

## [1] 4.89572

mean(ejDatos$merma)

## [1] 4.89572

median(ejDatos$merma)

## [1] 5.026095

#moda
datoshist$mids[which(datoshist$counts == max(datoshist$counts))]

## [1] 5.5

Recordemos que si hay valores faltantes no podemos hacer cálculos a menos que indiquemos que
no se tengan en cuenta esas observaciones.

ejDatos_ori <- read.csv2("practica/ejdatos_ori.csv")


mean(ejDatos_ori$merma)

## [1] NA

mean(ejDatos_ori$merma, na.rm = TRUE)

## [1] 4.943273

mean media aritmética

median mediana

max máximo

min mínimo

which devuelve los índices de un vector que cumplen una condición

Capítulo 1 / Página 43
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

Medidas de posición
El percentil x nos indican aquél valor para el cual el x % de las observaciones de la muestra son
inferiores a dicho valor.

quantile(ejDatos$merma, 0.05)

## 5%
## 3.675773

En el 5 % de las unidades hubo un peso inferior a 3.6757733kg


Especial interés tienen los cuartiles, que son el percentil 25 y 75, y la Mediana, que es el percentil
50. Estos valores, junto con el máximo y el mínimo de la muestra, constituyen el resumen de
cinco números, que se muestra con la función ‘summary’ aplicada a un vector, junto con la media
aritmética.

summary(ejDatos$merma)

## Min. 1st Qu. Median Mean 3rd Qu. Max.


## 0.188 4.342 5.026 4.896 5.377 7.775

summary(ejDatos$manchas)

## Min. 1st Qu. Median Mean 3rd Qu. Max.


## 2.00 5.00 7.00 6.82 8.00 14.00

Estratificación
Generalmente los datos numéricos son homogéneos dentro de los distintos grupos, pero pueden ser
muy heterogéneos entre los grupos. Por ejemplo, si analizamos una variable en animales de distintas
razas, los datos pueden ser muy diferentes de unos a otros. Para obtener resúmenes por grupos
podemos seguir dos estrategias: obtener primero el subconjunto correspondiente como vimos en el
capítulo anterior y después aplicar la función correspondiente, o utilizar la función tapply. Para
funciones que devuelven un solo valor podemos obtener subtotales con la función aggregate.

tapply(ejDatos$merma, ejDatos$maquina, summary)

## $maquina1
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.188 4.449 4.971 4.851 5.353 6.075
##
## $maquina2
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3.429 4.137 5.081 4.940 5.583 7.775

Capítulo 1 / Página 44
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

El primer argumento es el vector con los datos, el segundo argumento es el vector con los grupos o
categorías, y el tercero es la función que queremos aplicar a cada grupo. El resultado es un resumen
de cinco números de la variable merma para cada valor de la variable maquina.

Medidas de dispersión
Las siguientes funciones devuelven el rango, la varianza, la desviación típica, el rango intercuar-
tílico y la desviación a la mediana.

range(ejDatos$merma)

## [1] 0.1879618 7.7754891

var(ejDatos$merma)

## [1] 0.8154839

sd(ejDatos$merma)

## [1] 0.9030415

IQR(ejDatos$merma)

## [1] 1.034561

mad(ejDatos$merma)

## [1] 0.7717776

1.3.2. Representación gráfica de datos


En R disponemos de varias estrategias para representación gráfica. Los gráficos del paquete
graphics son conocidos por su gran potencia y posibilidades de configuración. Los gráficos del
paquete lattice están especialmente indicados para representaciones multivariantes. El paquete
grid permite realizar gráficos como si estuviéramos dibujando en un lienzo. Por último, la represen-
tación gráfica mediante el paquete ggplot2 proporciona los resultados visualmente más atractivos.
En este taller veremos los gráficos estándar de R, ya que el resto requeriría un curso específico.

Gráficos – Generalidades
Se pueden generar gráficos en R prácticamente sin opciones adicionales a los datos. A este respecto,
genéricamente un gráfico en dos dimensiones tiene dos ejes: uno horizontal y otro vertical. Las
funciones gráficas esperan dos vectores: uno para el eje horizontal, y otro para el eje vertical. Si solo

Capítulo 1 / Página 45
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

se proporciona un vector, entonces será utilizado para el eje vertical, y el eje horizontal serán los
índices del vector. También se le puede pasar una fórmula indicando a la izquierda del símbolo ~ el
vector del eje vertical, y a la derecha el vector del eje horizontal.
R decide cuál es el gráfico más apropiado y representa los datos. Si el gráfico no es el que
deseamos, podemos pasar más argumentos o utilizar los parámetros gráficos para personalizar el
gráfico. Podemos distinguir dos tipos de opciones:

Las opciones genéricas de gráficos. Consultar ?plot

Los parámetros gráficos. Consultar ?par

Opciones genéricas

tipo: type – l(lines), p(points), b(both)

títulos y etiquetas: main, sub, xlab, ylab

(Algunos) Parámetros gráficos

colores: col.*, bg, fg

líneas: lty, lwd

puntos: pch

márgenes: mai, mar, oma

fuentes: family, font.*

Magnificación: cex.*

Ejemplos opciones

par(bg="white")
plot(1:10, main = "Título", sub = "Subtítulo", type = "b",
xlab = "Índice", ylab = "Variable",
col = 2, cex = c(rep(1, 9), 2), pch = 16,
fg = "blue")

Capítulo 1 / Página 46
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

Título

10

8


6
Variable


4


2

2 4 6 8 10

Índice
Subtítulo

Histograma
Lo importante del histograma es que, dependiendo de los datos, es posible que la representación
sea mejor cambiando el número de barras por defecto mediante el argumento breaks.

hist(ejDatos$merma)

Histogram of ejDatos$merma
40
30
Frequency

20
10
0

0 2 4 6 8

ejDatos$merma

Capítulo 1 / Página 47
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

Gráfico de caja
Al igual que hicimos con el histograma, los datos utilizados para dibujar el gráfico de caja también
se pueden guardar en una variable y utilizarlos después. Esto es útil por ejemplo para identificar los
valores atípicos.

datosbp <- boxplot(ejDatos$merma)


8


6
4
2


0

Identificación de atípicos

datosbp$out

## [1] 0.1879618 7.7754891

ejDatos[which(ejDatos$merma %in% datosbp$out), ]

## maquina merma manchas defecto defecto2 temp


## 4 maquina1 0.1879618 8 Sí 1 77.15387
## 62 maquina2 7.7754891 7 Sí 1 98.85587

El objeto de clase boxplot es una lista en la que el elemento out son los posibles valores atípicos.
Podemos buscar los registros que se corresponden con estos valores, y buscar si ha habido algún
problema.

Capítulo 1 / Página 48
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

Gráfico de barras

barplot(table(ejDatos$manchas))
25
20
15
10
5
0

2 3 4 5 6 7 8 9 10 11 14

Gráfico de barras apilado


En este caso tenemos que añadir una leyenda. Consulta la documentación de la función legend
para ver las opciones.

barplot(table(ejDatos$defecto, ejDatos$manchas),
col = gray(1:3 / 3),
xlab = "Nº de lechones")
legend("topright", legend = levels(ejDatos$defecto), fill = gray(1:3 / 3))

Capítulo 1 / Página 49
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

25
No
20
15
10
5
0 Sí

2 3 4 5 6 7 8 9 10 11 14

Nº de lechones

Gráfico de dispersión
El gráfico de dispersión se obtiene mediante la función plot, bien pasando como argumentos x e
y los vectores con los valores, o mediante la fórmula. Podemos añadir una línea de regresión para
ver visualmente si hay relación.

plot(merma ~ temp, data = ejDatos)


abline(lm(ejDatos$merma ~ ejDatos$temp))
8




●●
●● ●
6


● ●
● ● ●
● ●● ●

●●●●●●●

● ● ●
●●
● ●●●
● ●

●●
● ● ●
●● ●
● ●● ●
●●●
●●● ●

●● ● ●●
● ●●

merma

●●●●

● ●●●
●●●
4

● ●●
●●●
●●●

2


0

50 60 70 80 90 100

temp

Capítulo 1 / Página 50
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

Estratificación en gráficos
Podemos obtener gráficos de caja por grupos de forma muy sencilla indicando que la variable del
eje horizontal (x) es el factor de agrupación.

boxplot(merma ~ maquina, data = ejDatos)


8
6
4
2


0

maquina1 maquina2

Un poco más complicado es hacerlo por ejemplo para histogramas. Con las librerías lattice
y ggplot2 se obtienen visualizaciones muy llamativas. Con los gráficos estándar podemos crear
matrices de gráficos. Por ejemplo para el ejemplo anterior, tenemos 2 histogramas, uno por cada
granja. Entonces mediante los parámetros gráficos creamos una matriz de 2 columnas y una fila de
gráficos, y los obtenemos con la función tapply.

Matriz de histogramas

par(mfrow = c(1,2))
tapply(ejDatos$merma, ejDatos$maquina, hist)

Capítulo 1 / Página 51
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

Histogram of X[[i]] Histogram of X[[i]]

14
20

8 10
Frequency

Frequency
15
10

6
4
5

2
0

0 1 2 3 4 5 6 7 3 4 5 6 7 8

X[[i]] X[[i]]

## $maquina1
## $breaks
## [1] 0 1 2 3 4 5 6 7
##
## $counts
## [1] 1 0 0 1 24 21 3
##
## $density
## [1] 0.02 0.00 0.00 0.02 0.48 0.42 0.06
##
## $mids
## [1] 0.5 1.5 2.5 3.5 4.5 5.5 6.5
##
## $xname
## [1] "X[[i]]"
##
## $equidist
## [1] TRUE
##
## attr(,"class")
## [1] "histogram"
##
## $maquina2
## $breaks
## [1] 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0
##

Capítulo 1 / Página 52
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

## $counts
## [1] 1 10 6 6 14 7 4 1 0 1
##
## $density
## [1] 0.04 0.40 0.24 0.24 0.56 0.28 0.16 0.04 0.00 0.04
##
## $mids
## [1] 3.25 3.75 4.25 4.75 5.25 5.75 6.25 6.75 7.25 7.75
##
## $xname
## [1] "X[[i]]"
##
## $equidist
## [1] TRUE
##
## attr(,"class")
## [1] "histogram"

par(mfrow = c(1,1))

En este Curso cero nos hemos centrado en mostrar cómo obtener gráficos con las mínimas op-
ciones: una simple llamada a una función con los datos como argumento ya produce el gráfico
apropiado. Es importante destacar que, además de los paquetes específicos para gráficos mencio-
nados más arriba, podemos conseguir espectaculares visualizaciones utilizando los gráficos base de
R con las opciones apropiadas. Sirva como ejemplo los siguientes histograma con una presentación
mejorada añadiendo algunas opciones a la función hist.

Añadiendo opciones a los gráficos

par(bg = rgb(193/255, 221/255, 223/255))

hist(ejDatos$merma,
breaks = 10,
main = "Histograma de la merma",
xlab = "Peso (kg.)",
ylab = "Densidad",
freq = FALSE,
col = rgb(128/255,182/255,182/255),
border = "white",

Capítulo 1 / Página 53
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

bg = "red",
ylim = c(0, 0.6),
col.lab = rgb(56/255, 56/255, 48/255))
lines(density(ejDatos$merma), lwd = 3,
col = rgb(56/255,56/255,48/255))

Histograma de la merma
0.6
0.5
0.4
Densidad

0.3
0.2
0.1
0.0

0 2 4 6 8

Peso (kg.)

Práctica 5
Descripción de datos con R
Sigue el guión de la práctica en el Capítulo 2 del taller.

1.4. Informes con RStudio


1.4.1. Problema y enfoques
El resultado final de nuestro trabajo en mejora de procesos terminará comunicándose a distintos
niveles, tanto aguas arriba como aguas abajo. Esta comunicación, digamos en general informes
que pueden tener distintos formatos de destino, estará compuesta de múltiples elementos como
texto, gráficos, resultados numéricos, tablas, etc. Además, es posible que haya que generarlos en
distintos formatos como la web, documentos imprimibles o presentaciones. Finalmente, con una
alta probabilidad varias personas intervendrán en el proceso.

Capítulo 1 / Página 54
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

El Problema

Enfoque Copy-paste
Este enfoque provoca inconsistencias (por ejemplo entre unos grupos y otros, entre diferentes
analistas, etc.), errores, contenidos desactualizados o no reproducibles, especialmente en la ejecución
de software, simulaciones, etc.
Además, cada vez que hay que hacer un cambio, hay que hacerlo en muchos sitios, con la consi-
guiente pérdida de tiempo y posibles errores.

Inconsistencias

Capítulo 1 / Página 55
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

Errores

Desactualización

No reproducibilidad

Cualquier cambio requiere mucho esfuerzo

Investigación reproducible

El enfoque de la investigación reproducible supera muchos de los obstáculos a la hora de preparar


informes de análisis de datos. El objetivo es unir instrucciones para análisis de datos con datos
experimentales de forma que los resultados se puedan volver a obtener, entender mejor y verificar
Un concepto muy relacionado que utilizamos en R es la programación “literaria”, mediante la cual
combinamos un lenguaje de programación como R con documentación de todo tipo.

Reproducible Research
The goal of reproducible research is to tie specific instructions to data analysis and experimental
data so that reports can be recreated, better understood and verified

Literate Programming
Literate programming is a methodology that combines a programming language with a documen-
tation language

Enfoque Reproducible

El flujo de trabajo sería el siguiente: los contenidos se encuentran en ficheros de código. Estos
ficheros fuente, se compilan y producen los materiales en los formatos necesarios. Los cambios se
hacen una vez, y todos los materiales son actualizados adecuadamente

Capítulo 1 / Página 56
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

1.4.2. Exportación de resultados


En ciertas ocasiones es necesario exportar un gráfico individual, o incluir rápidamente resultados
en algún documento externo como un correo electrónico. Con R obtenemos dos tipos de resultado:
texto y gráficos. El texto podemos copiarlo y pegarlo directamente de la consola y pegarlo en
cualquier otra aplicación. También podemos volcar los resultados directamente en un fichero de
texto mediante la función sink.

Volcar resultados a fichero

sink("miSalida.txt")
x <- rnorm(100)
summary(x)

## Min. 1st Qu. Median Mean 3rd Qu. Max.


## -2.8558 -0.4148 0.1741 0.1251 0.6978 3.0438

## Los comentarios no se guardan en el fichero


shapiro.test(x)

##
## Shapiro-Wilk normality test
##
## data: x
## W = 0.99018, p-value = 0.6788

Capítulo 1 / Página 57
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

sink()

Exportación de gráficos
Se puede realizar la exportación de gráficos desde el asistente de RStudio fácilmente. En el icono
export podemos copiarlo al portapapeles, exportar como pdf, o exportar como imagen. En la expor-
tación podemos elegir la ubicación y el nombre del fichero, así como las dimensiones de la imagen.
En el caso de exportar como imagen podemos seleccionar distintos formatos (PNG, SVG, . . . )

Exportación de gráficos - con código


Podemos exportar gráficos mediante código a la vez que los generamos. Para ello inicializamos
el dispositivo gráfico con alguna de las funciones disponibles (ver ?Devices), por ejemplo pdf,
png o svg. A continuación generamos el gráfico que queremos exportar. Finalmente cerramos el
dispositivo con la función dev.off. El archivo quedará guardado en el fichero que hayamos pasado
como argumento a la función que inicializó el dispositivo.

png("img/miGrafico.png", 800, 600)

plot(rnorm(100))

dev.off()

Capítulo 1 / Página 58
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

1.5. Enfoque reproducible


1.5.1. Markdown
Markdown es un tipo de ficheros de texto pensado para que se pueda leer bajo cualquier circuns-
tancia, con una sintaxis muy simple que permite leerlo directamente por las personas, o convertir
a un formato más elaborado como HTML (página web). Se pueden crear fichero Rmarkdown uti-
lizando esta sintaxis para las explicaciones de nuestro proceso, e incluir dentro trozos (chunks) de
código de forma que al generar el informe, el resultado de ese código queda incluido en el informe.
Así, si una vez terminado el informe se nos ha olvidado incluir un gráfico, sólo tenemos que añadir
las líneas de código que lo crean y volver a generar el informe, por ejemplo.

Markdown en RStudio

Al crear un nuevo documento R markdown, se crea una plantilla automáticamente donde podemos
ver lo fácil que es crear el informe. Hay una guía rápida de markdown disponible en la ayuda. Incluir
títulos, énfasis en el texto y listas es muy sencillo, y a menudo no necesitamos nada más para realizar
un informe. El código de R se inserta mediante el icono chunks. Podemos manejar el aspecto que
tendrá finalmente el resultado de los chunks en el informe mediante las opciones dentro de las llaves
en el encabezado del chunk. Como en cualquier script, podemos ejecutar otros scripts mediante la
función source, por ejemplo para la importación de datos u otras acciones rutinarias, y dejar el
código en el informe lo más limpio posible.
Podemos compilar el informe cuantas veces queramos (icono de bordado), una vez sea definitivo
lo guardamos en el disco. Podemos imprimirlo al abrirlo con el navegador, enviarlo por correo
electrónico, o incluso publicarlo en la Intranet de la organización.

Capítulo 1 / Página 59
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

Formatos de salida
Con las últimas versiones de RStudio, además de ficheros html es posible crear ficheros pdf y
Word. Para este cometido RStudio integra la aplicación pandoc. Al crear un fichero R Markdown
aparece un cuadro de diálogo donde podemos seleccionar si queremos hacer un documento, una
presentación, o un documento interactivo (shiny). Posteriormente se puede generar cualquiera de
los formatos independientemente del que se haya elegido al crear el fichero mediante el icono de
‘bordado’.

Ejemplo fichero R Markdown

---
title: "Ejemplo para el taller R desde el principio"
author: "Emilio L. Cano"
date: "31/01/2015"
output: word_document
---

Capítulo 1 / Página 60
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

Este es mi primer ejemplo de informe generado con RStudio. Voy a crear un


conjunto de datos:

‘‘‘{r}
pdensity <- c(10.6817, 10.6040, 10.5709, 10.7858,
10.7668, 10.8101, 10.6905, 10.6079,
10.5724, 10.7736, 11.0921, 11.1023,
11.0934, 10.8530, 10.6774, 10.6712,
10.6935, 10.5669, 10.8002, 10.7607,
10.5470, 10.5555, 10.5705, 10.7723)
‘‘‘

Y este es su histograma:

‘‘‘{r, echo=FALSE}
hist(data = pdensity)
‘‘‘

¡Funcionó! Usar R para análisis de datos es genial.

Informe generado (Word)

Ejemplo para el taller R desde el principio


Emilio L. Cano

31/01/2015

Este es mi primer ejemplo de informe generado con RStudio. Voy a


crear un conjunto de datos:
pdensity <- c(10.6817, 10.6040, 10.5709, 10.7858,
10.7668, 10.8101, 10.6905, 10.6079,
10.5724, 10.7736, 11.0921, 11.1023,
11.0934, 10.8530, 10.6774, 10.6712,
10.6935, 10.5669, 10.8002, 10.7607,
10.5470, 10.5555, 10.5705, 10.7723)

Y este es su histograma:

Capítulo 1 / Página 61
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

1.5.2. Más opciones


Presentaciones
Además de la opción anterior para generar presentaciones, hay un tipo de proyecto específico
en RStudio para las presentaciones. Las presentaciones en formato HTML incluyen las imágenes
embebidas, y se podrá visualizar en cualquier navegador moderno, por ejemplo Google Chrome. Las
presentaciones en pdf requieren tener instalada una distribución del sistema de edición libre LATEX.
También se pueden crear documentos RHtml para crear páginas o sitios web.

Control del código


Dentro de los ficheros R Markdown, Sweave, o cualquier otro que incluya chunks (pedazos) de
código, podemos controlar cómo se verá el código y el output (tanto textual como gráfico) en el
documento final. Estas son algunas de las opciones más útiles.

echo Mostrar código en informe

error Mostrar mensajes de error

warning Mostrar mensajes de advertencia

message Mostrar mensajes

eval Evaluar el chunk

fig.align Alineación de los gráficos

Capítulo 1 / Página 62
ceRo V1.02 Ed. del Orto–2018-02-01 R desde el principio

fig.width Ancho del gráfico generado (en pulgadas, por defecto 7)

fig.height Alto del gráfico generado (en pulgadas, por defecto 7)

out.width Ancho del espacio que ocupa el gráfico en el informe

out.height Alto del espacio que ocupa el gráfico en el informe

fig.keep Mantener los gráficos en el informe

include Mostrar salida de texto al ejecutar el código

results Forma de mostrar los resultados

Utilizar markdown para realizar informes de procesos es la opción más sencilla tanto por su uso
como porque no se requieren otras aplicaciones instaladas. A continuación se incluyen a modo de
referencia otras opciones.

Más formatos

xtable: Este paquete genera tablas y se puede usar en combinación con markdown

Sweave: para generar documentación en pdf mediante el lenguaje LATEX.

gtable: vuelca el output como gráficos

Rhtml: mayor control sobre el código html

shiny: Aplicaciones web

Práctica 6
Informes con RStudio
Sigue el guión de la práctica en el Capítulo 2 del taller.

Consultas y seguimiento del taller


Hemos llegado al final del taller R desde el principio. Si tienes dudas o preguntas sobre el material
dirígete a los autores:

emilio@lcano.com

Capítulo 1 / Página 63
2 Prácticas
Contenido

2.1. Práctica 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2. Práctica 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2.2. La consola de R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2.3. Componentes de R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3. Práctica 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.4. Práctica 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.5. Práctica 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.6. Práctica 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

© Emilio López Cano y Javier Martínez Moguerza. Licencia CC BY-NC-ND 4.0


ISBN: 978-84-7923-526-0. Ediciones del Orto.

Este libro forma parte del material didáctico utilizado por los autores en programas de formación
a pre-graduados, post-graduados y profesionales sobre el uso del software estadístico R en diversos
ámbitos. Correo electrónico de contacto: emilio.lcano@uclm.es

Capítulo 2 / Página 1
ceRo V1.02 Ed. del Orto–2018-02-01 Prácticas

2.1. Práctica 1
P1. Instalación de R y RStudio
En esta primera práctica revisaremos el proceso de instalación del software necesario para seguir
el taller. Se describe el proceso para Windows, ver la documentación en la web de R para otros
sistemas.

1. Descarga R
Ve a http://www.r-project.org;
Haz click en el enlace Download R;
Selecciona un mirror próximo a tu localización;
Haz click en el enlace Download R for Windows;
Haz click en el enlace base;
Haz click en el enlace Download R 3.x.x for Windows;
Guarda el fichero .exe en una carpeta de tu ordenador.

2. Instala R
Abre la carpeta donde guardaste el fichero .exe;
Haz doble click en el fichero R-3.x.x-win.exe;
Acepta las opciones por defecto en el asistente de instalación.

3. Descarga RStudio
Ve a http://www.rstudio.com;
Haz click en el enlace Powerful IDE for R;
Haz click en el enlace Desktop;
Haz click en el botón Download RSudio Desktop;
Haz click en el enlace RStudio x.xx.xxx - Windows XP/Vista/7/8 ;
Guarda el fichero .exe en una carpeta de tu elección.

4. Instala RStudio
Asegúrate de tener instalada la última versión de Java1 en tu sistema;
Abre la carpeta donde guardaste el fichero .exe;
Haz doble click en el fichero RStudio-x.xx.xxx.exe;
Acepta las opciones por defecto del asistente de instalación.
1
http://www.java.com

Capítulo 2 / Página 3
ceRo V1.02 Ed. del Orto–2018-02-01 Prácticas

5. Descarga e instala MikTeX


Para poder realizar informes en pdf necesitas una distribución de LATEX.
Ve a http://miktex.org/;
Haz click en el enlace Downloads;
Descarga el fichero para la instalación recomendada;
Ejecuta el fichero descargado.

6. Abre R y familiarízate con sus componentes.

Capítulo 2 / Página 4
ceRo V1.02 Ed. del Orto–2018-02-01 Prácticas

2.2. Práctica 2
P2. Empezando con R

Sigue el guión de la práctica

Practica tú mismo las expresiones en la consola de R

Experimenta con tus propias pruebas, cambia cosas

En esta práctica . . .
Practicaremos expresiones de de R en la consola de R.

2.2.1. Introducción
R2 es una aplicación de análisis estadístico y representación gráfica de datos, y además un lenguaje
de programación. R es interactivo, en el sentido de que responde a determinadas entradas que
recibe. Estas entradas son expresiones que pueden ser de diversos tipos, principalmente:

Una expresión aritmética;

Una expresión lógica;

Una llamada a una función;

Una asignación.

Si la expresión está incompleta, el intérprete de R queda a la espera hasta que la expresión se


complete. Si la expresión está completa, el intérprete la evalúa, produciendo un resultado. Este
resultado puede mostrar algunas salidas al usuario, que puede ser texto o gráficos. Algunas expre-
siones no producen ninguna salida visible, y su resultado es almacenar datos en variables, escribir
datos en disco, o cualquier otro. En las siguientes páginas, las entradas y salidas de R se muestran
con fondo gris. Las entradas se pueden copiar y pegar directamente en la consola de R o el editor
de scripts de RStudio. Las salidas se identifican con dos símbolos ## al inicio de la línea.
En esta práctica inicial utilizamos la consola de R en el interfaz gráfico instalado por defecto (no
RStudio).

2
http://www.r-project.org

Capítulo 2 / Página 5
ceRo V1.02 Ed. del Orto–2018-02-01 Prácticas

2.2.2. La consola de R
La principal forma de interactuar con R es a través de la consola. La consola es un intérprete de
expresiones que espera a que introduzcamos una expresión cada vez, después la evalúa, y produce un
resultado (con salida visible o no). La consola espera que escribamos una expresión tras el símbolo
> Una vez escrita la expresión, pulsamos la tecla de retorno de línea, si está completa la evalúa.
Por ejemplo, la expresión más sencilla posible es escribir un número (practica tú mismo todas las
expresiones en la consola):

## [1] 1

Vemos que el resultado de esta expresión es una línea de texto con el número 1 entre corchetes
y a continuación el número 1. El número 1 entre corchetes es un identificador que se explicará más
adelante. El resultado es el mismo número que hemos escrito. Un paso más sería hacer un cálculo
numérico, por ejemplo:

1 + 1

## [1] 2

Podemos hacer operaciones aritméticas con números en la consola. ¿Qué pasa si la expresión está
incompleta?

1 +

Como podemos comprobar, el símbolo > cambia a +, indicando que la expresión no está completa.
El sistema queda así hasta que completamos la expresión, o pulsamos la tecla ESC, que cancela la
instrucción.
Las expresiones aritméticas devuelven el resultado de la operación. Otro tipo de expresiones en
R son las expresiones lógicas, que devuelven el valor verdadero (TRUE) o falso (FALSE):

5 > 6

## [1] FALSE

Por último, habíamos dicho que una llamada a una función es también una expresión. La siguiente
expresión es un ejemplo sencillo de una llamada a una función:

log(pi)

## [1] 1.14473

Capítulo 2 / Página 6
ceRo V1.02 Ed. del Orto–2018-02-01 Prácticas

donde pi es a su vez una expresión que obtiene el valor del objeto interno que contiene el valor de
π = 3,14159. . . .

pi

## [1] 3.141593

La función log obtiene el logaritmo de un número. La llamada a una función es siempre igual:
el nombre de la función más (obligatoriamente) paréntesis de apertura y cierre, y dentro de los
paréntesis, los argumentos de la función separados por comas. Los argumentos de las funciones se
pueden declarar de varias formas:

Por el orden en el que están definidos en la propia función;

Por el nombre con el que están definidos en la propia función. R tiene una característica
llamada partial matching que permite escribir sólo el principio del nombre;

Utilizar su valor predeterminado. Algunos parámetros de funciones tienen un valor predeter-


minado. Si no proporcionamos uno distinto, es el que se utiliza.

Siguiendo con el ejemplo del logaritmo, podemos ver los argumentos que puede recibir mediante
la función str3 :

str(log)

## function (x, base = exp(1))

Por tanto, log es una función que admite dos argumentos: x, que no tiene ningún valor predeter-
minado, y base, cuyo valor predeterminado es la expresión:

exp(1)

## [1] 2.718282

es decir, el número e. Por tanto el valor que obtenemos con la función log es el logaritmo natural
(con base e) del número que le pasemos como primer argumento, o con otra base si se la pasamos
como argumento base. Por ejemplo el logaritmo decimal sería:

log(1000, base = 10)

## [1] 3
3
Esta función devuelve la estructura (structure) de cualquier objeto de R

Capítulo 2 / Página 7
ceRo V1.02 Ed. del Orto–2018-02-01 Prácticas

¿Qué pasa si no le pasamos tampoco el primer argumento a la función?

log()

## Error in eval(expr, envir, enclos): el argumento "x" está ausente, sin valor por
omisión

Lo que pasa es que como no hay un valor predeterminado para el argumento x, la función devuelve
un error indicando que se necesita un argumento. El mensaje suele tener indicaciones para resolver
el problema. Algunas funciones pueden devolver el resultado sin necesidad de ningún argumento.
Por ejemplo, la función seq genera secuencias de números

str(seq)

## function (...)

Los tres puntos (. . . ) indican que la función acepta un número indeterminado de argumentos.
¿Qué pasa si la ejecutamos sin argumentos?

seq()

## [1] 1

Obtenemos una secuencia de números desde el 1 hasta el 1 por intervalos de 1. Es decir, simple-
mente un 1. Podemos averiguar más sobre los argumentos que espera una función llamando a la
ayuda de R con cualquiera de las siguientes expresiones:

help("seq")
?seq

Como la función no necesita ningún argumento para funcionar, ¿la podríamos usar sin los parén-
tesis?
seq

## function (...)
## UseMethod("seq")
## <bytecode: 0x6d17810>
## <environment: namespace:base>

La respuesta es no, porque para R, todos los símbolos son objetos. La expresión seq sin paréntesis
es el símbolo de la función seq, y lo que devuelve el intérprete de R es el “contenido” de la función,
es decir, su código4 .
4
En este caso no se muestra todo el código porque es una función compilada.

Capítulo 2 / Página 8
ceRo V1.02 Ed. del Orto–2018-02-01 Prácticas

2.2.3. Componentes de R
El histórico Cada vez que mandamos una expresión a evaluar a R, esta expresión se guarda en el
histórico. Esto nos permite varias cosas. Sin duda la más útil y utilizada es que podemos navegar por
el histórico desde la consola utilizando las flechas arriba y abajo del teclado, y por tanto recuperar
cualquier comando del histórico de la sesión actual.

El espacio de trabajo (workspace) Una de las características de R es que todos los datos con los
que trabaja se encuentran en memoria. Esto es un inconveniente cuando hay grandes volúmenes
de datos (realmente grandes) que al nivel de este curso no nos afecta. Hasta ahora sólo hemos
interactuado con R para obtener una salida, pero no tenemos ningún dato guardado. Los objetos
que creemos con R se guardan en el espacio de trabajo. Para crear un objeto en el espacio de trabajo
utilizamos el operador de asignación <-. Nótese que es como una flecha hacia la izquierda, con la
que asignamos al símbolo que pongamos a la izquierda, el resultado de la expresión que pongamos
a la derecha. Por ejemplo, la siguiente expresión

x <- log(pi)

asigna al símbolo x el valor de la expresión log(pi). Vemos que en este caso no tenemos ninguna
salida. Ahora bien, R ha almacenado en el objeto llamado x el valor de esa expresión. Los símbolos
de objetos que vamos creando son expresiones en sí, y podemos mostrar su valor simplemente
escribiéndolos:

## [1] 1.14473

A partir del momento en que lo hayamos creado, podemos utilizarlo para cualquier cálculo pos-
terior

r <- 5
y <- x * r

Ahora tenemos tres objetos en nuestro espacio de trabajo. Podemos ver una lista de todos los
objetos en el espacio de trabajo mediante la función ls() (pruébalo).

El directorio de trabajo (working directory) Aunque R trabaje con los datos en memoria, nece-
sitaremos trabajar con ficheros de diversas formas. Las más habituales serán:

Leer ficheros de datos para utilizar en los análisis de datos.

Escribir ficheros de datos para posteriores análisis.

Capítulo 2 / Página 9
ceRo V1.02 Ed. del Orto–2018-02-01 Prácticas

Guardar gráficos para incluir en informes utilizando otras herramientas.

Crear scripts de R para escribir conjuntos de expresiones que contengan un análisis completo.

Crear ficheros de informes que contengan código y texto que se puedan compilar y presentar.

Lo podemos resumir en dos: trabajar con datos, y trabajar con código. Cuando en alguna expresión
de R intervienen ficheros, se puede proporcionar la ubicación del fichero de dos formas distintas:

Mediante la ruta absoluta. Es decir, la ubicación en el disco duro del ordenador con la ruta
completa.

Mediante la ruta relativa. Es decir, la ubicación en el disco duro del ordenador a partir del
directorio de trabajo.

Para saber cuál es el directorio de trabajo actual, podemos utilizar la función

getwd()

## [1] "/home/emilio/R-projects/cursos/content/6_r-es_taller"

La cadena de texto que obtenemos en la salida de R es la ruta absoluta a nuestro directorio de


trabajo. Si queremos cambiar el directorio de trabajo, podemos utilizar la función setwd() pasándo-
le como primer argumento la cadena de texto con la ruta absoluta o relativa del nuevo directorio de
trabajo que queremos utilizar. También se pueden utilizar los menús del interfaz de R que estemos
utilizando.

Vamos a importar un fichero de datos al espacio de trabajo. Para ello, seguimos los siguientes
pasos:

1. Crea una carpeta para el curso a tu conveniencia dentro del ordenador.

2. Selecciona esta carpeta como directorio de trabajo.

3. Crea una carpeta llamada practica dentro de la carpeta elegida como directorio de trabajo.

4. Guarda el fichero merma.csv en la carpeta llamada practica.

5. Ahora vamos a leer los datos del fichero merma.csv y los vamos a guardar en la variable
datosmerma del espacio de trabajo:

datosmerma <- read.csv2("practica/merma.csv")

Capítulo 2 / Página 10
ceRo V1.02 Ed. del Orto–2018-02-01 Prácticas

Ahora tenemos en el espacio de trabajo un objeto de tipo data.frame con los datos de ejemplo.
Antes de continuar, vamos a ver qué contiene el fichero original. Ábrelo primero con un editor de
texto (por ejemplo notepad) y después con Excel.

Veamos cómo se han guardado los datos en R.

datosmerma

## merma1 merma2
## 1 0.5898096 0.5546336
## 2 0.7699551 0.4586740
## 3 0.4423950 0.4625733
## 4 0.1879618 0.4435143
## 5 0.5905073 0.5891067
## 6 0.3134635 0.5275887
## 7 0.3826816 0.4838308
## 8 0.4836043 0.5074132
## 9 0.2486089 0.5160621
## 10 0.6051586 0.5730381
## 11 0.5067886 0.4975202
## 12 0.4791623 0.4873221
## 13 0.6042787 0.4941835
## 14 0.5346945 0.5286707
## 15 0.4122351 0.5076593
## 16 0.5943235 0.4478568
## 17 0.3975605 0.4973688
## 18 0.6621651 0.4678119
## 19 0.4480144 0.4745331
## 20 0.4931513 0.4776396
## 21 0.2888590 0.5650112
## 22 0.3383765 0.5366145
## 23 0.3472022 0.4868374
## 24 0.3083300 0.4452029
## 25 0.5900408 0.4994261
## 26 0.4043457 0.5418506
## 27 0.6855449 0.5161952
## 28 0.4066120 0.5621270
## 29 0.5193181 0.5054836
## 30 0.5238445 0.4423790
## 31 0.5459414 0.4803725
## 32 0.5128432 0.4628434

Capítulo 2 / Página 11
ceRo V1.02 Ed. del Orto–2018-02-01 Prácticas

## 33 0.5860134 0.5128423
## 34 0.4247076 0.5126099
## 35 0.4253199 0.4565454
## 36 0.7457103 0.5154761
## 37 0.5575050 0.5326917
## 38 0.3400140 0.4776172
## 39 0.4483312 0.5070834
## 40 0.5011622 0.5017150
## 41 0.5749295 0.4607430
## 42 0.5386808 0.4175651
## 43 0.5151573 0.5335224
## 44 0.6497129 0.4584059
## 45 0.4090000 0.5226908
## 46 0.4224551 0.4680626
## 47 0.3802048 0.5275968
## 48 0.4580838 0.4560155
## 49 0.3871146 0.4713060
## 50 0.5852463 0.4605988

Se trata de 50 observaciones de dos variables. Podemos ver usar también la función str para
obtener su estructura, o la función head para obtener sólo las primeras líneas.

str(datosmerma)

## ’data.frame’: 50 obs. of 2 variables:


## $ merma1: num 0.59 0.77 0.442 0.188 0.591 ...
## $ merma2: num 0.555 0.459 0.463 0.444 0.589 ...

head(datosmerma)

## merma1 merma2
## 1 0.5898096 0.5546336
## 2 0.7699551 0.4586740
## 3 0.4423950 0.4625733
## 4 0.1879618 0.4435143
## 5 0.5905073 0.5891067
## 6 0.3134635 0.5275887

En las siguientes prácticas veremos más en detalle los objetos de tipo data.frame. De momento
digamos que sólo nos interesa la primera variable, merma1. Puedo acceder a esta variable de varias
formas, la más habitual es utilizar el operador $:

Capítulo 2 / Página 12
ceRo V1.02 Ed. del Orto–2018-02-01 Prácticas

datosmerma$merma1

## [1] 0.5898096 0.7699551 0.4423950 0.1879618 0.5905073 0.3134635 0.3826816


## [8] 0.4836043 0.2486089 0.6051586 0.5067886 0.4791623 0.6042787 0.5346945
## [15] 0.4122351 0.5943235 0.3975605 0.6621651 0.4480144 0.4931513 0.2888590
## [22] 0.3383765 0.3472022 0.3083300 0.5900408 0.4043457 0.6855449 0.4066120
## [29] 0.5193181 0.5238445 0.5459414 0.5128432 0.5860134 0.4247076 0.4253199
## [36] 0.7457103 0.5575050 0.3400140 0.4483312 0.5011622 0.5749295 0.5386808
## [43] 0.5151573 0.6497129 0.4090000 0.4224551 0.3802048 0.4580838 0.3871146
## [50] 0.5852463

Hasta ahora sólo habíamos visto objetos atómicos, es decir, sólo contenían un elemento. Los datos
de la columna merma1 son un vector. Nos fijamos que ahora el identificador a la izquierda de la
salida de R cobra sentido. El número entre corchetes al lado de cada línea indica el número de orden
del primer dato de la línea.
Los vectores son el tipo de datos más importantes en R. Muchas de las funciones disponibles en R
están definidas sobre vectores. Por ejemplo, podemos calcular la media de estos cincuenta valores:

mean(datosmerma$merma1)

## [1] 0.4833425

o cualquier otro resumen númerico:

summary(datosmerma$merma1)

## Min. 1st Qu. Median Mean 3rd Qu. Max.


## 0.1880 0.4049 0.4884 0.4833 0.5827 0.7700

Incluso un gráfico, que se abrirá automáticamente en el dispositivo (device) que tenga establecido
R.

boxplot(datosmerma$merma1)

Capítulo 2 / Página 13
ceRo V1.02 Ed. del Orto–2018-02-01 Prácticas
0.7
0.6
0.5
0.4
0.3
0.2

La sesión de R La sesión de R podemos decir que se compone (básicamente) del histórico y el


espacio de trabajo disponibles en un momento dado. Podemos guardar ambos en el directorio de
trabajo en cualquier momento. Al finalizar una sesión de R, nos pregunta si queremos guardar la
sesión. Si la guardamos, cuando volvamos a abrir R desde ese directorio de trabajo, se cargará
automáticamente la sesión y tendremos disponibles todos los objetos e histórico de la sesión. Las
funciones save, load, savehistory y loadhistory permiten guardar y recuperar información de la
sesión. Con RStudio (ver el apartado siguiente) se puede realizar mediante comandos de menú más
fácilmente.

Capítulo 2 / Página 14
ceRo V1.02 Ed. del Orto–2018-02-01 Prácticas

2.3. Práctica 3
P3. Más fácil con RStudio

Sigue el guión de la práctica

Practica tú mismo las expresiones en la consola de R

Experimenta con tus propias pruebas, cambia cosas

En esta práctica . . .
Practicaremos las expresiones de la práctica 1 en RStudio.
El interfaz de usuario de R (R GUI) cumple las funciones básicas para interactuar con R, pero es
muy pobre a la hora de trabajar con él. En su lugar, utilizaremos el interfaz de usuario RStudio5 ,
que es como un envoltorio del sistema R. Es necesario tener instalado primero R y después instalar
RStudio. La pantalla de RStudio está dividida en cuatro partes:

En la parte superior izquierda, tenemos el editor. Aquí podemos editar scripts de R y cualquier
otro tipo de archivo de texto, por ejemplo markdown o html para realizar informes. También
es en este cuadrante donde se visualizan las tablas de datos que tengamos en el espacio de
trabajo.

En la parte inferior izquierda, tenemos la consola de R. Podemos interactuar con R como se


ha descrito arriba.

En la parte superior derecha tenemos los entornos (environment), entre los que se encuentra
el espacio de trabajo de la sesión actual, y el histórico.

en la parte inferior izquierda tenemos organizadas en pestañas los siguientes elementos:


• Un explorador de archivos. Podemos hacer que la carpeta actual sea el directorio de
trabajo, o que el explorador muestre la carpeta correspondiente al directorio de trabajo
muy fácilmente;
• La salida gráfica de R;
• Los paquetes disponibles;
• La ayuda;
• Un visualizador de aplicaciones web.
• Prueba a obtener el logaritmo de cero. Comentaremos la salida el próximo día.
5
http://www.rstudio.org

Capítulo 2 / Página 15
ceRo V1.02 Ed. del Orto–2018-02-01 Prácticas

Iremos viendo cada componente en sucesivas prácticas. RStudio contiene ciertas ayudas a la
hora de escribir expresiones de R. Por ejemplo, si pulsamos las teclas <CTRL + ENTER> en
el editor, se muestran los objetos disponibles en el espacio de trabajo. Esta lista se puede
filtrar escribiendo (antes o después de pulsar las teclas) las primeras letras del objeto que
buscamos. Si tenemos el cursor dentro de los paréntesis de una función y pulsamos las teclas
<CTRL + TAB>, obtenemos una lista de los argumentos que podemos proporcionar a la función,
incluyendo una ayuda básica sobre ellos.
Para terminar esta práctica, realícese lo siguiente:
1. Seleccionar el directorio de trabajo a utilizar durante el curso.
2. Probar en la consola de RStudio las expresiones que se han visto hasta ahora.
3. Crear un script llamado practica0.R con algunos de los comandos vistos.
4. Intenta aplicar algunas de las funciones de las presentaciones al conjunto de datos de
ejemplo.
5. Practica con las dos columnas de datos de los datos de ejemplo.
6. Explorar los distintos componentes de RStudio.
7. Buscar ayuda sobre funciones.
8. Visualizar datos del espacio de trabajo.

Capítulo 2 / Página 16
ceRo V1.02 Ed. del Orto–2018-02-01 Prácticas

2.4. Práctica 4
P4. Trabajar con datos

Sigue el guión de la práctica

Practica tú mismo las expresiones en la consola de R

Experimenta con tus propias pruebas, cambia cosas

En esta práctica . . .
Practicaremos la importación, creación, acceso y modificación de datos.

1. Abre RStudio. Revisa los distintos paneles y pestañas disponibles, familiarízate con ellas.

2. Decide cuál va a ser tu directorio de trabajo para el taller.

3. Selecciona el directorio en el que quieres trabajar desde el panel de archivos. AYUDA: utiliza
el icono con los tres puntos (. . . ).

4. Cambia el directorio de trabajo a tu carpeta. AYUDA: utiliza el icono More.

5. Crea una estructura de carpetas para el taller. Sugerencia:


practica
codigo
informes

6. Copia los ficheros CSV de la práctica en la carpeta practica

7. Crea un fichero de código (R script) y guárdalo en la carpeta codigo

8. Introduce las siguientes expresiones en el script. Utiliza comentarios (##) para documentar tu
código, y ve probando que las expresiones funcionan:
Selección del directorio de trabajo. AYUDA: función setwd.
## Cambia "practicas/" por la ruta a tu carpeta. Recuerda que en Windows debes usa
setwd("taller/")
Comprueba si tienes instalada la librería ISOweek. Si no, instálala (si usas la función
install.packages, no hace falta que la guardes en el script)
Carga la librería ISOweek. (AYUDA: función library).
library(ISOweek)

Importa el fichero ‘ejDatos2.csv’ al espacio de trabajo. AYUDA: función read.csv2.

Capítulo 2 / Página 17
ceRo V1.02 Ed. del Orto–2018-02-01 Prácticas

pesos <- read.csv2("practica/ejdatos2.csv")

Explora los datos y familiarízate con los nombres de variables, número de filas, tipos de
datos, etc.

9. Calcular columnas para el conjunto de datos pesos:


Crea la columna fecha2 para que R la interprete como datos temporales. AYUDA: función
as.Date.
ejDatos2$fecha2 <- as.Date(ejDatos2$fecha, format("%d/%m/%Y"))

Crea nuevas columnas para el año, año-mes, numero-mes y semana (ISO) de la variable
fecha.
ejDatos2$año <- format(ejDatos2$fecha2, "%Y")
ejDatos2$mes <- format(ejDatos2$fecha2, "%m")
ejDatos2$añomes <- format(ejDatos2$fecha2, "%Y-%m")
ejDatos2$semana <- ISOweek(ejDatos2$fecha2)

Añade una variable que sea un ratio entre la merma y el número de manchas.
ejDatos2$ratio <- ejDatos2$merma / ejDatos2$manchas

10. Extracción de datos.


Crea un subconjunto de datos sólo para los datos de la máquina 1.
datosm1 <- subset(ejDatos2, maquina == "maquina1")

guarda la variable merma de este subconjunto en un vector


merma <- datosm1$merma

Extrae del conjunto de datos inicial los valores de todas las variables de la décima ob-
servación
ejDatos2[10, ]
## maquina merma manchas defecto defecto2 temp fecha fecha2
## 10 maquina1 4.978984 7 No 0 63.11871 19-01-2014 <NA>
## año mes añomes semana ratio
## 10 <NA> <NA> <NA> <NA> 0.7112834

11. Recuerda ir guardando el fichero de código de vez en cuando.

12. Ejecuta todo el script y comprueba que funciona.

13. Cierra RStudio.

Capítulo 2 / Página 18
ceRo V1.02 Ed. del Orto–2018-02-01 Prácticas

NOTA 1. Las rutas de los ficheros pueden variar en tu ordenador con respecto a lo mostrado en
la práctica. Repasa lo visto sobre el directorio de trabajo (working directory).

NOTA 2. IMPORTANTE: el panel de archivos de RStudio es realmente un explorador de archivo


del sistema. Los cambios que hacemos se hacen en el sistema de archivos. Si eliminamos un archivo o
carpeta, LO ELIMINAMOS DEL SISTEMA. Además, RStudio no lo envía a la papelera, se elimina
permanentemente.

Capítulo 2 / Página 19
ceRo V1.02 Ed. del Orto–2018-02-01 Prácticas

2.5. Práctica 5
P5. Descripción de datos con R
Sigue el guión de la práctica
Practica tú mismo las expresiones en la consola de R
Experimenta con tus propias pruebas, cambia cosas
Asegúrate de haber realizado las prácticas anteriores

En esta práctica. . .
Realizaremos análisis exploratorio de datos básicos
1. Abre RStudio. Revisa los distintos paneles y pestañas disponibles, familiarízate con ellas.
2. Abre el script que creaste en la práctica 1. NOTA: si no lo cerraste antes de cerrar RStudio,
lo tendrás abierto automáticamente.
3. Ejecuta el script y comprueba que el directorio de trabajo es el del taller.
4. Muestra el directorio de trabajo en el panel de ficheros. AYUDA: utiliza la flecha en la barra
de título de la consola.
5. Comprueba que tienes los conjuntos de datos en el espacio de trabajo.
6. Visualiza el conjunto de datos ejDatos2, comprueba los tipos de datos.
7. Obtén una distribución de frecuencias de la merma con 8 bloques. AYUDA: funciones cut y
table. ¿Cuál es la moda de los datos?

tabla <- table(cut(ejDatos2$merma, 8))


tabla

##
## (3.42,3.97] (3.97,4.52] (4.52,5.06] (5.06,5.6] (5.6,6.15] (6.15,6.69]
## 12 18 21 29 16 3
## (6.69,7.23] (7.23,7.78]
## 0 1

## Intervalo modal:
names(tabla)[tabla == max(tabla)]

## [1] "(5.06,5.6]"

Capítulo 2 / Página 20
ceRo V1.02 Ed. del Orto–2018-02-01 Prácticas

8. Calcula la media global de la merma.

mean(ejDatos2$merma)

## [1] 4.953981

9. Obtén un resumen de cinco números, un histograma y un gráfico de caja.

summary(ejDatos2$merma)

## Min. 1st Qu. Median Mean 3rd Qu. Max.


## 3.429 4.393 5.041 4.954 5.378 7.775

hist(ejDatos2$merma)

Histogram of ejDatos2$merma
30
25
20
Frequency

15
10
5
0

3 4 5 6 7 8

ejDatos2$merma

caja <- boxplot(ejDatos2$merma)

Capítulo 2 / Página 21
ceRo V1.02 Ed. del Orto–2018-02-01 Prácticas


7
6
5
4

10. Busca los valores atípicos en el conjunto de datos.

## Hay dos valores atípicos, asignando el gráfico de caja


## a un objeto los puedo encontrar
caja$out

## [1] 7.775489

## Puedo encontrar las filas con todas las variables de estas dos observaciones
pesos[ejDatos2$merma %in% caja$out, ]

## maquina merma manchas defecto defecto2 temp fecha


## 62 maquina2 7.775489 7 Sí 1 98.85587 11-01-2014

11. Etiqueta los valores atípicos en el gráfico de cajas con el identificador de fila.

caja <- boxplot(ejDatos2$merma)


filas <- rownames(ejDatos2)[ejDatos2$merma %in% caja$out]

Capítulo 2 / Página 22
ceRo V1.02 Ed. del Orto–2018-02-01 Prácticas

text(x = 1,
y = caja$out,
label = filas,
pos = 4)

● 62
7
6
5
4

12. Obtén un resumen de cinco números por año del conjunto de datos producción para alguna
de las variables, por ejemplo manchas. AYUDA: función tapply.

tapply(ejDatos2$merma, ejDatos2$manchas, summary)

## $‘2‘
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4.347 4.670 4.993 4.993 5.316 5.639
##
## $‘3‘
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4.329 4.715 4.940 5.007 5.232 5.818
##

Capítulo 2 / Página 23
ceRo V1.02 Ed. del Orto–2018-02-01 Prácticas

## $‘4‘
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3.530 4.706 5.237 4.910 5.441 5.634
##
## $‘5‘
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3.429 4.585 5.081 4.920 5.375 6.663
##
## $‘6‘
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3.960 4.570 4.990 4.990 5.415 5.913
##
## $‘7‘
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3.662 4.441 5.012 5.033 5.366 7.775
##
## $‘8‘
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3.966 4.343 5.051 5.090 5.878 6.140
##
## $‘9‘
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3.897 4.196 4.773 4.773 5.205 6.031
##
## $‘10‘
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3.892 4.208 4.654 4.784 4.931 6.421
##
## $‘11‘
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4.118 4.134 4.722 4.717 5.305 5.307
##
## $‘14‘
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4.943 4.979 5.016 5.016 5.053 5.090

13. Haz un gráfico de dispersión de la merma frente a la temperatura.

plot(temp ~ merma, data = ejDatos2)

Capítulo 2 / Página 24
ceRo V1.02 Ed. del Orto–2018-02-01 Prácticas

100

90



80

● ●
●● ● ●
●●
● ●●
●●
temp

● ●●
● ●

70

● ●
● ●●
● ●●
● ● ●●
●● ●
●●
●●
● ●●●

●●●
●●



● ●
● ● ●

● ●●●
60

●●●
●●
●●
●●



● ●●

● ●●●

●● ●

50

● ●

●● ●

4 5 6 7

merma

## Podemos añadir información al gráfico


plot(temp ~ merma,
data = ejDatos2,
col = defecto,
pch = 16)

legend("bottomright",
legend = unique(ejDatos2$defecto),
fill = unique(ejDatos2$defecto))

Capítulo 2 / Página 25
ceRo V1.02 Ed. del Orto–2018-02-01 Prácticas

100


90



80

● ●
●● ● ●
●●
● ●●
●●
temp

● ●●
● ●

70

● ●
● ●●
● ●●
● ● ●●
●● ●
●●
●●
● ●●●

●●●
●●



● ●
● ● ●

● ●●●
60

●●●
●●
●●
●●



● ●●

● ●●●

●● ●

50

● ●
● Sí
●● ●
● No

4 5 6 7

merma

Capítulo 2 / Página 26
ceRo V1.02 Ed. del Orto–2018-02-01 Prácticas

2.6. Práctica 6
P6. Informes con R

Sigue el guión de la práctica

Practica tú mismo las expresiones en la consola de R

Experimenta con tus propias pruebas, cambia cosas

En esta práctica. . .
Realizaremos informes reproducibles en diversos formatos.

1. Para poder generar informes en pdf, instala una distribución de LATEX apropiada para tu
sistema6 .

2. Crea un fichero R Markdown para cada una de las prácticas anteriores y elabora un informe
sencillo para cada una de ellas.

3. Haz un informe sencillo utilizando R Sweave

4. Haz una presentación incluyendo análisis de procesos.

5. Compila los informes y presentaciones.

6
Visita http://www.miktex.com para Windows

Capítulo 2 / Página 27

Das könnte Ihnen auch gefallen