Práctica 1

Descripción de R y BrailleR

Objetivos

  • Descargar e instalar el programa de análisis estadístico R
  • Familiarizarse con el entorno de R y BrailleR
  • Conocer los tipos de datos en R y realizar operaciones básicas con ellos
  • Conocer las estructuras de datos en R y aprender a trabajar con ellas
  • Importar conjuntos de datos desde ficheros de texto.

Introducción a BrailleR e instalación de R

BrailleR es un paquete de R desarrollado por A. Jonathan R. Godfrey. Este paquete permite usar y aprender R fácilmente, crea salidas verbales para ser leídas por pantalla, facilita la lectura de resumen, genera salidas de gráficos básicos y también dispone de una función para facilitar la escritura de código R. Este paquete es de gran ayuda para los usuarios principiantes del software estadístico R y una herramienta útil para los usuarios más intermedios y avanzados.

Vamos a centrarnos en la instalación del paquete BrailleR para Windows, que suele ser el sistema operativo más utilizado en la comunidad de discapacitados visuales y especialmente para los afiliados españoles de la ONCE. También daremos algunos consejos centrados en la funcionalidad del lector de pantalla JAWS, que es el facilitado por la asociación ONCE y por tanto de mayor acceso.

Instalación de R

R es un programa para el análisis estadístico de datos que se puede descargar de forma gratuita desde la dirección web http://www.r-project.org. Para ello, hay que pulsar la opción CRAN que aparece en el menú situado en la parte izquierda de la página.

Ubicación de la opción CRAN dentro de la página principal de R Project: www.r-project.org

Figura 1: Ubicación de la opción CRAN dentro de la página principal de R Project

A continuación, se elige en http://cran.r-project.org/mirrors.html el repositorio desde el cual se desea descargar el programa (conviene elegir un repositorio cercano para minimizar los tiempos de conexión). Elegimos Spain (https://cran.rediris.es/) en el menú situado a la izquierda de la página.

Figura 2: Elección del repositorio Spain (https://cran.rediris.es/)

Por último, se selecciona el sistema operativo en el que se va a instalar R (Windows, Linux o Mac). La figura siguiente muestra las tres opciones

  • Download R for Linux
  • Download R for(Mac) OS X
  • Download R for Windows

Imagen de la web donde se selecciona el sistema operativo en el que se va a instalar RFigura 3: Selección del sistema operativo

Para instalar R, en el sistema operativo Windows, elegir Dowload R for Windows. En la pantalla siguiente se elige, install R for the first.

Figura 4: Elección en esta pantalla “install R for the first time

La instalación se encuentra en un ejecutable, donde se muestran dos opciones: Guardar archivo y Cancelar.

Figura 5: Abriendo R-3-6-1-win.exe

Elegimos Guardar archivo y una vez guardado lo ejecutamos. Se muestra la siguiente salida que es un asistente de instalación de R para Windows.

Figura 5: Selección del idioma a utilizar durante la instalación

Pulsamos Aceptar para seleccionar el idioma español

Figura 6: Ejecutable de instalación: elegir Siguiente

Figura 7: Seleccionar la carpeta de Destino. Pulsar Siguiente

Pulsamos la opción siguiente y el asistente realiza la instalación del programa.

La instalación sólo realiza cambios mínimos en windows y copia los archivos necesarios en un directorio. Su desinstalación es sencilla y completa.

El directorio habitual donde realiza la instalación es C:/Archivos de programa. El programa crea en él un subdirectorio, R, y por cada versión un subdirectorio de este último donde copia todos los archivos, por ejemplo R-3.6.1. para la versión 3.6.1. En la instalación es conveniente seleccionar todas las opciones que se ofrecen, de tal modo que siempre se disponga de todas las ayudas posibles.

Figura 8: Selección de componentes

La figura  8 muestra las componentes de instalación de R. Debemos seleccionar todas las componentes que ofrece el programa. Pulsar Siguiente

Figura 9: Opciones de configuración

En la figura 9 se muestra las opciones de configuración. Pulsar Siguiente

Figura 10: Selección de las tareas adicionales. Pulsar Siguiente

La figura 10 muestra diferentes opciones:

Iconos adicionales:

  • Crear un icono en el escritorio
  • Crear un icono de inicio rápido

Registro de entradas

  • Guardar el número de versión en el registro
  • Asociar archivos .RData con R

Se eligen las opciones y se pulsa Siguiente.

Figura 11: Completada la instalación. Pulsar Finalizar

Pulsar Finalizar

Resumen:

  1. En el sitio web: http://www.r-project.org: Ir a  “CRAN”  situado debajo de “Download” (en la parte izquierda de la pantalla, Figura 1),
  2. elegir país de descarga (España) (Figura 2: https://cran.rediris.es/)
  3. Seleccionar la versión correspondiente a nuestro sistema operativo (Linus, Windows o Mac) Figura 3
  4. Seguir las instrucciones de instalación del archivo ejecutable (Figura 5).

Una vez concluida la instalación, podemos ejecutar el programa desde cualquiera de los iconos que genera en el escritorio.

Figura 12: Interfaz de R

Al iniciar el programa R se muestra su interfaz de usuario (figura  12), que se compone de tres partes:

  • Una barra de menús que permite acceder, por ejemplo, a funciones de ayuda y a opciones para la configuración de la apariencia del programa.

 Figura 8: Barra de menúsFigura 13: Barra de menús

Es importante resaltar que, a diferencia de lo que ocurre con otros software estadístico, R no dispone de un menú que recoge todas las técnicas estadísticas que es capaz de llevar a cabo. Para realizar un análisis estadístico cualquiera en R, debemos introducir la expresión correspondiente en la consola, como veremos más adelante.

  • Una barra de herramientas compuesta por un conjunto de botones que permite un acceso rápido a una serie de operaciones que se realizan con frecuencia.

 Figura 9: Barra de herramientasFigura 14: Barra de herramientas

  • Una consola en la que se muestra un breve mensaje inicial que contiene información sobre la versión actual del programa y algunas instrucciones básicas para su manejo.

Debajo del mensaje de apertura se encuentra el prompt, que es el símbolo “>”. Las expresiones en R se escriben a continuación del prompt.

Por ejemplo, podemos escribir 2+2 en la consola a continuación del prompt, y tras pulsar la tecla “Enter”, nos devuelve en la misma consola el valor 4. (Recordar que estoy ejecutando R para Windows, el prompt de Linux y Mac es distinto).

> 2+2
[1] 4

Figura 15: Consola de R

Sin embargo, ésta no es la manera más eficiente de trabajar en R. Es muy útil manejar todas las entradas de código que solicitemos a R en un entorno donde podamos corregirlas, retocarlas, repetirlas, guardarlas para continuar el trabajo en otro momento, etc.  Esta es la función del editor de R.

Barra del menú principal: Opciones

Figura 16: Opciones del menú Archivo.

Desde la barra del Menú principal se puede acceder a todos los menús de R. Los primeros menús: Archivo, Editar, Visualizar y Ayuda son habituales en los programas bajo Windows. El resto de menús son específicos de R. Cada uno de estos menús contiene distintas opciones que se muestran pulsando en cada una de ellos.

Mediante el Menú Archivo accedemos a un documento en blanco del editor, llamado script. Para ello, elegimos Archivo y a continuación Nuevo script (Archivo/Nuevo script)

Figura 17. La Consola y el Editor de R

Elegimos Divida horizontalmente en el menú Ventanas

Figura 12. La Consola y el Editor de R (Ventanas/Divida horizontalmente)Figura 18. La Consola y el Editor de R (Ventanas/Divida horizontalmente)

Y se muestran las pantallas de la Consola de R y Editor de R en paralelo, para que podamos escribir en una y otra con mayor facilidad.

Figura 19. La Consola y el Editor de R (Ambas pantallas en paralelo)

Un script o guión de trabajo nos permite escribir tantas líneas de código R como se deseen. A continuación se puede ejecutar todo o una parte del código escrito. El uso de scripts resulta especialmente útil cuando se ha de ejecutar un mismo código varias veces, puesto que nos ahorra el tener que teclear el código una y otra vez en la consola. Además, los scripts permiten la modificación del código de una forma cómoda y sencilla. Una vez creado, un script puede guardarse fácilmente.

Para ello, utilizaremos la opción Guardar o Guardar como …del menú Archivo de la consola. (Archivo/Guardar ó Ctrl+S; Archivo/Guardar como…)

Un script previamente guardado se puede recuperar mediante la opción Abrir script … del mismo menú. (Archivo/Abrir script…ó Ctrl+O)

En otras ocasiones, antes de finalizar una sesión de trabajo en R resulta conveniente guardar el área de trabajo. El área de trabajo contiene todos los objetos que se han definido en R durante la sesión de trabajo. Por objetos entendemos todas las variables, funciones y demás resultados que se hayan creado y que hayan sido nombrados de algún modo.

Para guardar el área de trabajo actual en cualquier momento de la sesión o cargar un área de trabajo guardada anteriormente se utilizan las opciones Archivo/Guardar área de trabajo… y Archivo/Cargar área de trabajo…, respectivamente.

R almacena un histórico con todas las órdenes que hemos ido ejecutando durante la sesión. Para navegar por las órdenes que conforman el histórico se utilizan las flechas arriba (↑) y abajo (↓) del teclado, las cuales muestran la orden anterior y la orden siguiente a una orden dada. Un histórico de instrucciones puede guardarse en cualquier momento mediante la opción Archivo/Guardar Histórico… Igualmente, se puede recuperar un histórico de instrucciones previamente guardado a través de la opción Archivo/Cargar Histórico…

Una vez hayamos instalado R el primer paso es familiarizarse con la consola. La edición de texto de la consola permite la lectura de los comandos pero no de los resultados.

Instalación de BrailleR

Para instalar BrailleR ejecutamos el comando

install.packages(“BrailleR”,repos=http://cran.us.r-project.org)

> install.packages(“BrailleR”)

Nos muestra la siguiente ventana

Figura 20: Secure CRAN mirrors

Donde seleccionamos Spain (Madrid) y pulsamos Ok.

Se muetra la siguiente salida en el editor de R

Installing package into ‘C:/Users/Usuario/Documents/R/win-library/3.5’
(as ‘lib’ is unspecified)
— Please select a CRAN mirror for use in this session —
probando la URL ‘https://cran.rediris.es/bin/windows/contrib/3.5/BrailleR_0.29.1.zip’
Content type ‘application/zip’ length 1468704 bytes (1.4 MB)
downloaded 1.4 MB

package ‘BrailleR’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
        C:\Users\Usuario\AppData\Local\Temp\RtmpszXUBM\downloaded_packages

Podemos cargar el paquete a nuestro espacio de trabajo mediante

> library(“BrailleR”)
The BrailleR package needs to create a directory that will hold your files.

It is convenient to use one in your home directory, because
it remains after restarting R.

Do you wish to create the ‘C:\Users\Usuario\Documents\MyBrailleR\’ directory?

Do you want to create the (almost) permanent folder?

1: Yes: create C:\Users\Usuario\Documents\MyBrailleR\ now
2: No,not this time

Selection: 2 * Hemos seleccionado la opción 2
N.B. You will be asked again next time you load the BrailleR package.
The BrailleR.View option has been set to TRUE.
Consult the help page for GoSighted() to see how settings can be altered.
You may wish to use the GetGoing() function as a quick way of getting started.

Attaching package: ‘BrailleR’

The following objects are masked from ‘package:graphics’:

    boxplot, hist

The following object is masked from ‘package:utils’:

    history

The following objects are masked from ‘package:base’:

    grep, gsub

NOTA: Al instalar el paquete BrailleR puede mostrarse a siguiente salida

> install.packages(“BrailleR”)
 Installing package into
‘C:/Users/Usuario/Documents/R/win-library/3.6’
 (as ‘lib’ is unspecified)
 — Please select a CRAN mirror for use in this session —
 Warning message:
 package ‘BrailleR’ is not available (for R version 3.6.1)

En este caso, hasta que se solucione el problema y el paquete vuelva a estar disponible. Hay que instalar BrailleR de forma local.  Para ello:

1. descarga este archivo

2. Elegir en R: Paquete/ Install package(s) from local files (la última opción).

3. Elegir el archivo que ha descargado y Abrirlo.

O bien descargar el archivo de: (https://cran.r-project.org/src/contrib/Archive/BrailleR/) y seguir los pasos indicados anteriormente.

IMPORTANTE: Recordar que cada vez que iniciemos R hay que conectar la biblioteca a nuestro espacio de trabajo mediante la sentencia

> library(“BrailleR”)

y utilizar el programa JAWS 2019,  esta versión del lector de pantalla cada vez que hay una fórmula detecta que es contenido matemático y lee completamente la fórmula. Si se pulsa Enter, abre un visualizador en el que se puede recorrer la fórmula con las flechas derecha/izquierda, y con arriba/abajo para analizarla por niveles.

Primeros pasos en R

Ejecutamos el programa desde el icono de R situado en el escritorio y se muestra una ventana, llamada consola (Figura 15), donde podemos manejar R mediante la introducción de código. En la consola R podemos escribir cada una de las instrucciones, o como hemos dicho anteriormente utilizamos el script para trabajar (Figura 19).

Funciones de ayuda

R es un software funcional, lo que quiere decir que realiza las tareas a través de funciones. La primera función que se va a presentar es help, la cual proporciona ayuda sobre cualquier función de R. Para acceder a la página de ayuda de una función, se escribe en la consola help seguido del nombre de la función a consultar entre paréntesis. Así, por ejemplo, si se desea obtener ayuda sobre la función mean (que, como se verá más adelante, calcula la media aritmética de un conjunto de datos), se debe teclear

> help (mean)

R muestra una pantalla de ayuda sobre la descripción de la media aritmética, su uso y ejemplos (http://127.0.0.1:23866/library/base/html/mean.html).

Una forma alternativa de obtener ayuda sobre una función es escribir el símbolo ? delante de su nombre.

> ?mean

Cuando no se conoce el nombre exacto de la función sino una o varias palabras claves, se puede utilizar la función help.search para la búsqueda de ayuda. Si se escribe en la consola

> help.search(“median”)

R devuelve todas las funciones relacionadas con el cálculo de la mediana.

  Tipos de datos: Operaciones

R permite trabajar con datos de distintos tipos. Los más comunes son:

  • Numeric: Para datos de tipo numérico. A su vez, dentro del tipo numérico se pueden distinguir dos subtipos de datos:
    • Integer: Para datos de tipo entero
    • Double: Para datos de tipo real (o de doble precisión). Es el tipo de dato numérico que R considera por defecto, es decir, cuando se define un número en R, éste será de tipo double
  • Logical: Para datos de tipo lógico o binario. Los valores que pueden tomar las variables de tipo lógico son TRUE o FALSE
  • Character: Para caracteres o cadenas de caracteres.
  Operaciones con tipos de datos
Creación de variables

Para crear una variable de tipo double (Datos de tipo real), basta con definir un valor numérico cualquiera. En R. mediante el operador <-  se asigna a la variable doub el valor 4 (<-  es un operador de asignación en R). En las nuevas versiones de R se puede utilizar el signo = en lugar de <-. Nosotros vamos a utilizar el signo = para que sea más comodo para leer con JAWS

> doub = 4    # Escribimos  doub =  4 en la consola y pulsamos la tecla “Enter”

Nota: Es posible incluir comentarios que R no leerá si utilizamos líneas que comiencen con el carácter #.

> doub = 4    # Asigna el valor 4 a la variable doub
> doub    #  muestra el valor de la variable doub
[1] 4

Para definir variables de tipo integer, se aplica la función as.integer() a un dato de tipo numérico.

> int = as.integer(4)
> int      #  muestra el valor de la variable int
[1] 4

Una variable lógica se define asignando el valor TRUE o FALSE a una variable.

> logi = FALSE
> logi
[1] FALSE

Por último, R considera como cadena de caracteres cualquier cosa encerrada entre comillas dobles (“”).

> char1 = “Hola” # cuidado con las comillas son las de la tecla del número 2
> char1
[1] “Hola”

> char2 = “5 + 6”
> char2
[1] “5 + 6”

Nota:Utilizando la tecla de “flecha arriba” se vuelen a escribir las sentencias de R que están en la Consola y con las teclas “flecha izquierda” y “flecha derecha”  se pueden recorrer las sentencias para en caso necesario transformarlas.

Comprobación del tipo de una variable

Para determinar el tipo de una variable se aplica la función typeof() sobre la variable en cuestión.

> typeof(doub)
[1] “double”

> typeof(int)
[1] “integer”

> typeof(char1)
[1] “character”

  Operadores básicos

R puede utilizarse como una calculadora, ya que tiene implementadas las principales operaciones aritméticas como son la suma, la diferencia, el producto, la división, la exponenciación, la división entera y el módulo de la división. Estas operaciones se realizan mediante los símbolos +,  -,  *,  /,  ^,  %/%  y  %%, respectivamente.

> 2^3
[1] 8

> 9/6
[1] 1.5

> 9%/%6
[1] 1

> 9%%6
[1] 3

Como se ha visto anteriormente, en R es posible definir variables asignándoles un determinado valor o, incluso, el resultado de una operación. Existen 3 operadores de asignación diferentes: <- , = y ->. Los dos primeros evalúan la expresión situada en la parte derecha y asignan el resultado a la variable de la parte izquierda, mientras que el último realiza la asignación de forma inversa, de manera que es el resultado de la evaluación de expresión de la parte izquierda el que se asigna a la variable de la derecha.

> a = 2 + 2    # resultado de 2+2 se asigna a la variable a
> b = 3 * 2    # resultado de 3*2 se asigna a la variable b
> c =  b – a    # resultado de b-a se asigna a la variable c

> a
[1] 4

> b
[1] 6

> c
[1] 2

En el ejemplo anterior, las variables a y b recogen el resultado de una suma. Es decir, primero se realiza la operación y el resultado es el que se almacena en la variable.

Por otra parte, existen varios operadores que permiten establecer comparaciones entre variables. Son los denominados operadores comparativos, que en R vienen representados por los símbolos == (igual a), != (distinto a), < (menor que), > (mayor que), <= (menor o igual que) y >= (mayor o igual que). Estos operadores se caracterizan por ser binarios, esto es, únicamente permiten comparaciones entre dos elementos. Para comparaciones más complejas, se utilizan los operadores lógicos. Los más utilizados son & (AND ó “y lógico”) y | (OR u “o lógico”).

> a == 5
[1] FALSE

> a == 4 & b < 2
[1] FALSE

> a == 4 | b < 2
[1] TRUE

> a == 4 | b < 2 & c != 9
[1] TRUE

  Otras funciones interesantes

Además de las operaciones elementales, R tiene implementadas una amplia variedad de funciones que permiten la realización de cálculos más complejos. A continuación se muestran algunas de ellas:

sqrt(x) : Raíz cuadrada de x

abs(x) : Valor absoluto de x

sin(x) : Seno de x

cos(x) :  Coseno de x

tan(x) : Tangente de x

log(x) :  Logaritmo neperiano de x

log10(x) : Logaritmo decimal de x

exp(x) : Exponencial de x

  Estructuras de datos

Hasta el momento se ha visto que se pueden definir variables en R que almacenen valores o resultados de operaciones. Pero cuando se desea guardar un número elevado de valores conviene organizarlos en estructuras de datos. Las estructuras de datos más utilizadas en R son

  • Arrays. Pueden tener varias dimensiones pero admiten únicamente un tipo de dato. Dependiendo del número de dimensiones, se distingue entre
    • Vectores. Una dimensión
    • Matrices. Dos dimensiones
    • Arrays. Tres o más dimensiones.
  • Factores. Se utilizan para almacenar variables cualitativas en las que no existe un orden específico entre las categorías.
  • Factores ordenados. Almacenan variables cualitativas ordinales, es decir, variables cualitativas con un cierto orden entre sus categorías.
  • Data frames. Admite variables de distintos tipos, pero con la misma longitud.
  • Listas. La lista es la estructura de datos más flexible puesto que permite incluir variables de tipos y longitudes diferentes.

  Creación de estructuras de datos

Una vez presentadas las estructuras de datos, el siguiente paso es aprender a crearlas.

Vectores: Para crear un vector se utiliza la función c, que concatena todos los elementos que recibe como argumentos.

c(elemento1, elemento2, elemento3, …)

Matrices: Las matrices se definen mediante la función matrix. Para ello, se ha de indicar qué datos va a tener la matriz, así como el número de filas y columnas.

matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,…)

Por defecto, la función matrix considera una matriz con una sola fila y una sola columna con valor NA (Not Available). El argumento byrow indica si la matriz se irá completando por columnas (byrow = FALSE, que es la opción por defecto) o por filas (byrow = TRUE). Modificando estos argumentos se pueden definir distintas matrices según las necesidades que se tengan.

Arrays: Los arrays se crean a través de la función array, especificando el conjunto de datos que va a formar parte del array así como las dimensiones del mismo.

array(data = NA, dim,…)

Factores y factores ordenados: Los  factores y factores ordenados en R se crean utilizando las funciones factor y ordered, respectivamente. Estas funciones necesitan como argumentos el conjunto de datos y los niveles o categorías del factor.

factor(x, levels,…)

ordered(x, levels,…)

Un detalle muy importante que hay que tener en cuenta a la hora de definir los niveles de un factor ordenado es que R considera que los niveles vienen dados de menor a mayor, es decir, que si dentro de la función ordered se especifica que levels = c(2, 1, 3), R entiende que la primera categoría es menor que la segunda y que la segunda es, a su vez, menor que la tercera, esto es, que 2 < 1 < 3.

Data frame y lista: Los data frame y las listas en R se crean utilizando las funciones data.frame y  list, respectivamente, indicando las variables que conformarán la estructura de datos.

data.frame(variable1, variable2, variable3,…)

list(variable1, variable2, variable3,…)

Veamos algunos ejemplos:

Vectores

>  vec = c(1, 3, 14)
> vec
[1]  1  3 14

Matrices

> mat1 =  matrix(c(1,2,3,4,5,6), nrow = 2, ncol = 3)   # por defecto las matrices se completan por columna
> mat1
[,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

> mat2 <- matrix(c(1,2,3,4,5,6), nrow = 2, ncol = 3, byrow = TRUE)      # byrow = TRUE indica que complete la matriz por filas
> mat2
[,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6

Nota: Las matrices mat1 y mat2 tienen los mismos elementos, pero en la primera de ellas están dispuestos por columnas, mientras que en la segunda se han colocado por filas.

Array

> arr = array(c(1,2,3,4,5,6,7,8), dim = c(2,2,2))
> arr
, , 1
[,1] [,2]
[1,]    1    3
[2,]    2    4

, , 2
[,1] [,2]
[1,]    5    7
[2,]    6    8

Matrices

> m = matrix(c(1,1,2,1),2,2)
> m
[,1] [,2]
[1,]    1    2
[2,]    1    1

Factores y Factores ordenados

> fac = factor(c(“H”,”M”,”M”,”H”,”H”,”M”), levels = c(“H”,”M”))
> ord = ordered(c(1,2,1,2,3,1,2,1,2), levels = c(1,2,3))

Como se ha resaltado antes, es muy importante tener en cuenta el orden en el que se indican los niveles de la variable en un factor ordenado. En un factor (no ordenado), el orden en el que aparecen las categorías de la variable es irrelevante. Así, mientras que los factores ordenados

> ord =  ordered(c(1,2,1,2,3,1,2,1,2),  levels = c(1,2,3))
> ord2 =  ordered(c(1,2,1,2,3,1,2,1,2),  levels = c(2,3,1))
> ord3 =  ordered(c(1,2,1,2,3,1,2,1,2), levels = c(3,1,2))

son distintos, estos otros factores no ordenados

> fac =  factor(c(“H”,”M”,”M”,”H”,”H”,”M”),  levels = c(“H”,”M”))
> fac2 =  factor(c(“H”,”M”,”M”,”H”,”H”,”M”),  levels = c(“M”,”H”))

son totalmente equivalentes.

Data frames y Listas

> a =  c(1,5,4)
> b =  c(“hola”, “adiós”, “hasta luego”)
> c =  c(TRUE, FALSE, FALSE)
> d =  c(1,2,3,4,5)
>  dataframe =  data.frame(a,  b,  c)

> dataframe
a           b     c
1 1        hola  TRUE
2 5       adiós FALSE
3 4 hasta luego FALSE

>  list1  =  list(a, b, c)
> list1
[[1]]
[1] 1 5 4
[[2]]
[1] “hola”        “adiós”       “hasta luego”
[[3]]
[1]  TRUE FALSE FALSE

> list2 =  list(a, b, c, d)
> list2
[[1]]
[1] 1 5 4
[[2]]
[1] “hola”        “adiós”       “hasta luego”
[[3]]
[1]  TRUE FALSE FALSE
[[4]]
[1] 1 2 3 4 5

  Acceso a los elementos de las estructuras de datos

Una vez definida una estructura de datos, es importante conocer cómo acceder a los elementos que la componen.

En un array (sea cual sea su dimensión), se utilizan los corchetes ([]), dentro de los cuales se indica la posición del elemento al que queremos acceder en cada una de las dimensiones del array.

> vec = c(1, 3, 14)
> vec[3]
[1] 14
> mat1 = matrix(c(1,2,3,4,5,6), nrow = 2, ncol = 3)
> mat1
[,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
> mat1[2, 3]
[1] 6
> arr = array(c(1,2,3,4,5,6,7,8), dim = c(2,2,2)) # el ultimo 2 indica que son dos matrices
> arr
, , 1
[,1] [,2]
[1,]    1    3
[2,]    2    4
, , 2
[,1] [,2]
[1,]    5    7
[2,]    6    8
> arr[2, 1, 2]     # el elemento de la segunda fila primera columna de la segunda matriz
[1] 6

También se puede acceder a varios elementos al mismo tiempo usando la función de concatenación c.

> mat1[c(1,2), 3]      # los elementos (1, 3) y (2, 3) de la matriz
[1] 5 6

En el ejemplo anterior se obtienen dos elementos de la matriz mat1. El primero situado en la primera fila y tercera columna y  el segundo situado en la segunda fila y tercera columna.

Para acceder a una fila completa, se indica el número de fila y no se indica ninguna columna.

> mat1[1,]
[1] 1 3 5

Del mismo modo se puede acceder a columnas completas

> mat1[, c(1,2)]
[,1] [,2]
[1,]    1    3
[2,]    2    4

Al igual que en el caso de los arrays, para acceder a un elemento de un factor o de un factor ordenado también se emplean los corchetes ([]), indicando la posición de dicho elemento.

>  fac[2]
[1] M
Levels: H M
>  ord[c(2, 5)]
[1] 2 3
Levels: 1 < 2 < 3

En los data frames se utiliza el símbolo $ seguido del nombre de la columna dentro del data frame.

>  dataframe$a
[1] 1 5 4

Recordemos que un data frame está formado por distintas columnas de igual longitud. Cada una de estas columnas es en realidad un vector de manera que, una vez se ha especificado la columna del data frame a la que se desea acceder (mediante el símbolo $), es posible obtener valores de la columna usando los corchetes. Así, por ejemplo, para obtener el primer valor dentro de la columna de nombre a incluida en el data frame que se llama dataframe se tiene que escribir

> dataframe$a[1]
[1] 1

Alternativamente, un data frame puede verse como una matriz por tanto, también pueden usarse los corchetes ([]) para acceder a sus elementos.

> dataframe[1,]
a    b    c
1 1 hola TRUE

Para acceder a un elemento dentro de una lista, se emplean los corchetes dobles ([[]]) y se indica dentro de ellos qué posición ocupa el elemento a acceder.

> list1[[2]]
[1] “hola”        “adiós”       “hasta luego”

> list2[[4]][2]
[1] 2

Ejemplos

> peso = c(19,14,15,17,20,23,30,19,25)
> peso < 20
[1]  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE FALSE
> peso < 20 | peso > 25
[1]  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE FALSE
> peso[peso < 20]
[1] 19 14 15 17 19
> peso[peso < 20 & peso != 15]
[1] 19 14 17 19
> trat =c(rep(“A”, 3), rep(“B”, 3), rep(“C”, 3))
> trat
[1] “A” “A” “A” “B” “B” “B” “C” “C” “C”
> peso[trat == “A”]
[1] 19 14 15
> peso[trat == “A” | trat == “B”]
[1] 19 14 15 17 20 23
> split(peso, trat)
$A
[1] 19 14 15
$B
[1] 17 20 23
$C
[1] 30 19 25
> split(peso, trat)$A
[1] 19 14 15
> x  =  1:15;  length(x)    # varias instrucciones en un mismo renglón separadas por ;
[1] 15
>  y = matrix(5, nrow = 3, ncol = 4); dim(y)
[1] 3 4
>  is.vector(x);  is.vector(y);  is.array(x)
[1] TRUE
[1] FALSE
[1] FALSE
>  x1  = 1:5;  x2  =  c(1, 2, 3, 4, 5);  x3  =  “patata”
>  typeof(x1);  typeof(x2);  typeof(x3)
[1] “integer”
[1] “double”
[1] “character”
>  mode(x);  mode(y);  z = c(TRUE, FALSE);  mode(z)
[1] “numeric”
[1] “numeric”
[1] “logical”
>  attributes(y)
$dim
[1] 3 4
>  w = list(a = 1:3, b = 5);  attributes(w)
$names
[1] “a” “b”
>  y =  as.data.frame(y);  attributes(y)        
$names
[1] “V1” “V2” “V3” “V4”
$class
[1] “data.frame”
$row.names
[1] 1 2 3

Ejemplos: Generación de secuencias

>  x  =   c(1, 2, 3, 4, 5)
> x
[1] 1 2 3 4 5
>  x  =  1 : 10 ;   y  =   -5 : 3
> x;y
[1]  1  2  3  4  5  6  7  8  9 10
[1] -5 -4 -3 -2 -1  0  1  2  3
> 1 : 4 + 1;   1 : (4 + 1)
[1] 2 3 4 5
[1] 1 2 3 4 5
>  x  =  seq(from = 2,   to = 18,   by = 2)    # la function seq genera una secuencia
> x
[1]  2  4  6  8 10 12 14 16 18
>  x =  seq(from = 2,  to = 18,  length = 30)
> x
 [1]  2.000000  2.551724  3.103448  3.655172  4.206897  4.758621  5.310345
 [8]  5.862069  6.413793  6.965517  7.517241  8.068966  8.620690  9.172414
[15]  9.724138 10.275862 10.827586 11.379310 11.931034 12.482759 13.034483
[22] 13.586207 14.137931 14.689655 15.241379 15.793103 16.344828 16.896552
[29] 17.448276 18.000000
>  y =  seq(along = x)
> y
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
[26] 26 27 28 29 30
>  z = c(1 : 5,  7:10,  seq(from=-7,  to=5,  by=2))
> z
[1]  1  2  3  4  5  7  8  9 10 -7 -5 -3 -1  1  3  5
> rep(1, 5)   #repite el 1 cinco veces
[1] 1 1 1 1 1
> x  = 1:3;  rep(x,  2)
[1] 1 2 3 1 2 3
> y  =  rep(5,  3);  rep(x,  y)
[1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
> rep(1 : 3,  rep(5,  3))
[1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
> rep(x,  x)
[1] 1 2 2 3 3 3
> rep(x,  length = 8)
[1] 1 2 3 1 2 3 1 2
> gl(3, 5) # es equivalente a rep(1:3, rep(5, 3))
[1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
Levels: 1 2 3
> gl(4, 1, length = 20) #  gl genera factores
[1] 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
Levels: 1 2 3 4
> gl(3, 4,  label = c(“Rubio”, “Moreno”, “Pelirrojo”))
[1] Rubio     Rubio     Rubio     Rubio     Moreno    Moreno    Moreno   
 [8] Moreno    Pelirrojo Pelirrojo Pelirrojo Pelirrojo
Levels: Rubio Moreno Pelirrojo

Nota: Para generar secuencias también podemos usar las funciones seq y rep

Ejemplos: Selección de los elementos de un vector

> x  =  1:7;  x[1];  x[3];  x[c(2,6)]  # el ; separa instrucciones 
[1] 1
[1] 3
[1] 2 6
> x[x > 4]
[1] 5 6 7
> x > 4
[1] FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE
> y = x > 4
> y
[1] FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE
> x[y]
[1] 5 6 7
> x[-c(1, 5)];  y  =  c(1, 2, 6);  x[y]
[1] 2 3 4 6 7
[1] 1 2 6
> names(x) = c(“a”, “b”, “c”, “d”, “e”, “manzana”)   # Cuidado con las dobles las comillas  (tecla del 2)
> names(x)
[1] “a”       “b”       “c”       “d”       “e”       “manzana” NA   
> x[c(“a”, “e”, “manzana”)]
a       e manzana
      1       5       6

Ejemplos. Ordenación de vectores

>  x =  c(7, 4, 5, 9, 1)  
>  order(x)
[1] 5 2 3 1 4
>  sort(x)
[1] 1 4 5 7 9
>  rev(x)
[1] 5 2 3 1 4
>  rank(x)
[1] 4 2 3 5 1
>  x[order(x)]
[1] 5 2 3 1 4
>  y  =  c(1, 5, 5, 5, 7, 7, 9, 9, 9, 9);  rank(x,  y)
[1] 4 2 3 5 1
>  min(x);   which.min(x);   which(x == min(x))
[1] 1
[1] 5
[1] 5
>  y = c(1, 1, 2, 2, 3);  order(y,  x)
[1] 2 1 3 4 5

Ejemplos de vectores de caracteres

> paste1 = paste(c(“I”, “J”, “M”), 3:5, sep = “”) 
> paste1
[1] “I3” “J4” “M5”
> paste2 = paste(c(“I”, “J”, “M”), 3:5, sep = “.”) 
> paste2
[1] “I.3” “J.4” “M.5”
> unir1 = paste(c(“el”, “sol”, “brilla”), collapse =” “)
> unir1
[1] “el sol brilla”
> unir2 = paste(c(“el”, “sol”, “brilla”), collapse =”-“)
> unir2
[1] “el-sol-brilla”
> unir3 = paste(c(“el”, “sol”, “brilla”))
> unir3
[1] “el”     “sol”    “brilla”
> letras  =  LETTERS[1:9];   números  =  7:15
> letras; números
[1] “A” “B” “C” “D” “E” “F” “G” “H” “I”
[1]  7  8  9 10 11 12 13 14 15
> unir4  = paste(letras,  números,  sep =””)
> unir4
[1] “A7”  “B8”  “C9”  “D10” “E11” “F12” “G13” “H14” “I15”
> substr(“abcdef”, 2, 4)
[1] “bcd”
> x  =  paste(LETTERS[1:7],  collapse = “”)
> x
[1] “ABCDEFG”
> substr(x, 3, 7)  =  c(“xyz”)
> substr(x, 3, 7)
[1] “xyzFG”
> x  =  c(60, 90, 903);  y  =  factor(x);  x ;  y
[1]  60  90 903
[1] 60  90  903
Levels: 60 90 903
> as.numeric(as.character(y)) # convierte un vector factor en numérico
[1]  60  90 903
> factor1  =  factor(c(“alto”, “bajo”, “medio”))
> factor1  
[1] alto  bajo  medio
Levels: alto bajo medio
> factor2  =  factor(c(“alto”, “bajo”, “medio”),  levels =  c(“bajo”, “medio”, “alto”))    # cambia el orden de las etiquetas
> factor2
[1] alto  bajo  medio
Levels: bajo medio alto

Ejemplos de arrays y matrices
> a  =  1:24;  dim(a)  =  c(3,4,2) 
> a ; dim(a)
, , 1
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12
, , 2
     [,1] [,2] [,3] [,4]
[1,]   13   16   19   22
[2,]   14   17   20   23
[3,]   15   18   21   24
[1] 3 4 2
>  arr1  =  array(7,  dim =  c(4,5))
> arr1
[,1] [,2] [,3] [,4] [,5]
[1,]    7    7    7    7    7
[2,]    7    7    7    7    7
[3,]    7    7    7    7    7
[4,]    7    7    7    7    7
> mat1  =  matrix(10:29,  nrow = 5)
> mat1
[,1] [,2] [,3] [,4]
[1,]   10   15   20   25
[2,]   11   16   21   26
[3,]   12   17   22   27
[4,]   13   18   23   28
[5,]   14   19   24   29
> mat2 = matrix(10:29,  nrow = 5,  byrow = TRUE)
> mat2
[,1] [,2] [,3] [,4]
[1,]   10   11   12   13
[2,]   14   15   16   17
[3,]   18   19   20   21
[4,]   22   23   24   25
[5,]   26   27   28   29
> mat3 =  10:29;  dim(mat3)  =  c(5, 4)
> mat3 ;  dim(mat3)  
  [,1] [,2] [,3] [,4]
[1,]   10   15   20   25
[2,]   11   16   21   26
[3,]   12   17   22   27
[4,]   13   18   23   28
[5,]   14   19   24   29
[1] 5 4
> a[1,1,1];  a[1,1,2];  a[3,4,2]
[1] 1
[1] 13
[1] 24
> a[2, , ]      # es un array de dimensión c(4,2)
[,1] [,2]
[1,]    2   14
[2,]    5   17
[3,]    8   20
[4,]   11   23
> a[ ,3 , ]      # es un array de dimensión c(3,2)
  [,1] [,2]
[1,]    7   19
[2,]    8   20
[3,]    9   21
> mat3[1, ];  mat3[, 2];  mat3[c(1, 3),  c(2, 4)]
[1] 10 15 20 25
[1] 15 16 17 18 19
     [,1] [,2]
[1,]   15   25
[2,]   17   27
> mat4  =  matrix(c(1, 3, 2, 4),  nrow = 2);  mat4
[,1] [,2]
[1,]    1    2
[2,]    3    4
> mat3[mat4]     # coordenadas matricialmente
[1] 15 27
> m1 = matrix(1: 4,  nr = 2, nc = 2)
> m1
[,1] [,2]
[1,]    1    3
[2,]    2    4
> m2 = matrix(6: 9,  nr = 2, nc = 2)
> m2
[,1] [,2]
[1,]    6    8
[2,]    7    9
> rbind(m1, m2)      # rbind une matrices por filas
[,1] [,2]
[1,]    1    3
[2,]    2    4
[3,]    6    8
[4,]    7    9
> cbind(m1, m2)      # cbind une matrices por columnas
[,1] [,2] [,3] [,4]
[1,]    1    3    6    8
[2,]    2    4    7    9
> diag(m1)              # diagonal principal de la matriz
[1] 1 4

 Ejemplos de Data frames y listas

> x =  1:4;  n = 10;  M  =  c(10, 35);  y  = 2:5 ; x; n; M; y  
[1] 1 2 3 4
[1] 10
[1] 10 35
[1] 2 3 4 5
> data.frame(x, n)
x  n
1 1 10
2 2 10
3 3 10
4 4 10
> data.frame(x, M)
x  M
1 1 10
2 2 35
3 3 10
4 4 35
> data.frame(x, y)
x y
1 1 2
2 2 3
3 3 4
4 4 5
>  l1  =  list(x, y);  l2  =  list(A = x,  B = y) ; l1; l2
[[1]]
[1] 1 2 3 4
[[2]]
[1] 2 3 4 5
$A
[1] 1 2 3 4
$B
[1] 2 3 4 5
> names(l1)
NULL
> names(l2)
[1] “A” “B”

  Lectura de datos desde ficheros externos

Cuando se trabaja con R es posible introducir los datos tecleándolos directamente e ir visualizándolos en la consola a medida que los escribimos. Sin embargo, no es la opción más habitual, ya que la introducción manual de datos es una tarea tediosa, especialmente cuando se tiene un gran volumen de información. En estos casos, lo más normal es disponer de un fichero de datos que el programa se encarga de leer. R es capaz de leer ficheros con multitud de formatos: Excel (con extensión .xls o .xlsx), SPSS (con extensión .sav),… Uno de los formatos más utilizado para almacenar datos es el formato fichero de texto (con extensión .txt). Los ficheros con extensión .txt son muy ligeros y sencillos de utilizar. Para leer un fichero .txt en R se emplea la función read.table

read.table(file, header = FALSE,…)

El primer argumento de la función, file, hace referencia a la ruta en la cual está el fichero a leer. Este argumento, al ser una cadena de caracteres, ha de ir entre comillas dobles. Un detalle importante a tener en cuenta es que en R la barra que se emplea para especificar una ruta es la barra / en lugar de la barra \ habitual.

Por otra parte, el segundo argumento es un argumento lógico mediante el cual se indica si en el fichero de texto que vamos a leer aparecen los nombres de las variables en la primera línea (en ese caso, header = TRUE) o no apacecen (entonces, header = FALSE, que es la opción por defecto).

Al emplear esta función, read.table, se obtiene un data frame con todas las observaciones de todas las variables incluidas en el fichero de texto.




Ejercicios

Ejercicios Guiados

Ejercicio guiado1

En la siguiente tabla se recogen datos acerca de la raza, la edad, el peso y la altura de 10 personas:

\( \begin{matrix}  \hline {\bf Raza} & {\bf Edad} &  {\bf Peso} &  {\bf Altura} \\ \hline  Blanca &         24 &         58 &        156 \\ Negra &         26 &         62 &        175 \\ Blanca &         62 &         61 &        169 \\ Blanca &         31 &         67 &        171 \\ Negra &         30 &         71 &        159 \\ Negra &         41 &         69 &        160 \\ Negra &         51 &         68 &        158 \\ Blanca &         23 &         73 &        178 \\ Blanca &         28 &         56 &        168 \\ Blanca &         30 &         82 &        166 \\ \hline \end{matrix} \)

Tabla1. Datos del Ejercicio Guiado 1

a) Elaborar un fichero de texto (con extensión .txt) que contenga la información de la tabla anterior. Utilizar el tabulador para separar la información referente a cada variable. Guárdalo en el escritorio y llámarlo mibasededatos.txt.

b) Desde R leer el fichero que se acaba de crear y almacenar su contenido en una variable de nombre datos.

c) Obtener los valores para las 4 variables para el tercer y el séptimo individuo

d) Determinar la altura del noveno individuo

e) Comprobar si la edad del primer individuo es mayor que la edad del último individuo

f) Comprobar si el peso conjunto de los dos primeros individuos es menor que el peso conjunto de los dos últimos

g) Calcular la raíz cuadrada de la altura del quinto individuo.

Ejercicio guiado2

La siguiente tabla incluye información acerca del sexo de seis estudiantes, sus puntuaciones en la asignatura de Estadística y la opinión que tienen acerca de la asignatura (Buena, Regular o Mala)

\(
\begin{matrix}
\hline
{\bf Sexo} & {\bf Puntuación} & {\bf Opinión} \\
\hline
Hombre &        7,5 &      Buena \\
Mujer &          8 &    Regular \\
Mujer &          2 &       Mala \\
Mujer &        6,5 &       Mala \\
Mujer &         10 &    Regular \\
Hombre &          9 &      Buena \\
\hline
\end{matrix}
\)

Tabla2. Datos del Ejercicio Guiado 2

Se pide:

a) Almacenar el contenido de la tabla en tres variables distintas (Sexo, Puntuación y Opinión), seleccionando el tipo de variable adecuado en cada caso

b) Crear un data frame de nombre Estudiantes que contenga la información de las tres variables creadas

c) La puntuación media de los hombres y de las mujeres

d) Los datos de las tres variables para el quinto individuo

e) El logaritmo neperiano de la puntuación del tercer individuo

f) Comprobar si la puntuación del segundo individuo o del cuarto individuo es superior a 7.


Ejercicio Guiado 1 (Resuelto)

En la siguiente tabla se recogen datos acerca de la raza, la edad, el peso y la altura de 10 personas:

\( \begin{matrix}  \hline {\bf Raza} & {\bf Edad} &  {\bf Peso} &  {\bf Altura} \\ \hline  Blanca &         24 &         58 &        156 \\ Negra &         26 &         62 &        175 \\ Blanca &         62 &         61 &        169 \\ Blanca &         31 &         67 &        171 \\ Negra &         30 &         71 &        159 \\ Negra &         41 &         69 &        160 \\ Negra &         51 &         68 &        158 \\ Blanca &         23 &         73 &        178 \\ Blanca &         28 &         56 &        168 \\ Blanca &         30 &         82 &        166 \\ \hline \end{matrix} \)

Tabla1. Datos del Ejercicio Guiado 1

Se pide:

a) Elaborar un fichero de texto (con extensión .txt) que contenga la información de la tabla anterior. Utilizar el tabulador para separar la información referente a cada variable. Guárdalo en el escritorio y llámarlo mibasededatos.txt.

Creamos un fichero de texto que recoja la información que muestra la tabla y lo guardamos en el escritorio con el nombre mibasededatos.txt. El fichero tendrá un aspecto parecido a éste

Figura 14. mibasededatos.txtFigura 14. mibasededatos

b) Desde R leer el fichero que se acaba de crear y almacenar su contenido en una variable de nombre datos.

Teniendo en cuenta que el fichero de datos contiene el nombre de las variables en la primera línea, la orden que tenemos que emplear es

> datos = read.table(“C:/Users/Usuario/Desktop/mibasededatos.txt”, header = TRUE)  # Cuidado con las dobles las comillas  (tecla “)

Nota: La ruta hasta llegar al fichero varía en función del ordenador. Utilizar la siguiente orden para situarse en el directorio de trabajo

> setwd(“C:/Users/Usuario/Desktop/nombrecarpeta”)

> datos = read.table(“mibasededatos.txt”, header = TRUE)

Después de leer el fichero de datos, veamos qué aspecto tiene la variable datos

> datos

Raza Edad Peso Altura
1   Blanca   24   58    156
2   Negra   26   62    175
3  Blanca   62   61    169
4  Blanca   31   67    171
5   Negra   30   71    159
6   Negra   41   69    160
7   Negra   51   68    158
8  Blanca   23   73    178
9  Blanca   28   56    168
10 Blanca   30   82    166

c) Obtener los valores para las 4 variables para el tercer y el séptimo individuo

Vamos a leer de forma conjunta las filas 3 y 7 del data frame.

> datos[c(3,7),]
Raza Edad Peso Altura
3 Blanca   62   61    169
7  Negra   51   68    158

d) Determinar la altura del noveno individuo

Tenemos dos formas de conocer la altura del individuo

> datos$Altura[9]
[1] 168

o bien

> datos[9,4]
[1] 168

e) Comprobar si la edad del primer individuo es mayor que la edad del último individuo

En este caso, tenemos que realizar una comparación simple

> datos$Edad[1] > datos$Edad[10]
[1] FALSE

f) Comprobar si el peso conjunto de los dos primeros individuos es menor que el peso conjunto de los dos últimos

> datos$Peso[1] + datos$Peso[2] < datos$Peso[9] + datos$Peso[10]
[1] TRUE

g) Calcular la raíz cuadrada depropuesto 2

la altura del quinto individuo

> sqrt(datos$Altura[5])
[1] 12.60952


Ejercicio Guiado 2 (Resuelto)

La siguiente tabla incluye información acerca del sexo de seis estudiantes, sus puntuaciones en la asignatura de Estadística y la opinión que tienen acerca de la asignatura (Buena, Regular o Mala)

\(
\begin{matrix}
\hline
{\bf Sexo} & {\bf Puntuación} & {\bf Opinión} \\
\hline
Hombre &        7,5 &      Buena \\
Mujer &          8 &    Regular \\
Mujer &          2 &       Mala \\
Mujer &        6,5 &       Mala \\
Mujer &         10 &    Regular \\
Hombre &          9 &      Buena \\
\hline
\end{matrix}
\)

Tabla2. Datos del Ejercicio Guiado 2

Se pide:

a) Almacenar el contenido de la tabla en tres variables distintas (Sexo, Puntuación y Opinión), seleccionando el tipo de variable adecuado en cada caso.

La variable Sexo es una variable cualitativa sin un orden específico entre sus categorías, de modo que crearemos un factor no ordenado para almacenar la información de esta variable.

La variable Opinión es una variable cualitativa con un orden entre sus categorías (Mala < Regular < Buena), por lo que crearemos un factor ordenado para almacenar la información de dicha variable

La variable Puntuación almacena en un vector de números reales.

> sexo = factor (c(“H”, “M”, “M”, “M”, “M”, “H”), levels = c(“H”, “M”))
> opinion = ordered (c(“B”, “R”, “M”, “M”, “R”, “B”), levels = c(“M”, “R”, “B”))
> puntuacion = c(7.5, 8, 2, 6.5, 10, 9)

>sexo
[1] H M MMM H
Levels: H M

>opinion
[1] B R M M R B
Levels: M < R < B

>puntuacion
[1]  7.5  8.0  2.0  6.5 10.0  9.0

Nota: No olvidar que en R el signo decimal viene dado por el punto (.) y no por la coma (,)

b) Crear un data frame de nombre Estudiantes que contenga la información de las tres variables creadas

> estudiantes = data.frame(sexo, puntuacion, opinion)
> estudiantes

sexo   puntuacion opinion
1    H                 7.5            B
2    M                8.0            R
3    M               2.0            M
4    M               6.5            M
5    M             10.0             R
6    H                9.0             B

c) La puntuación media de los hombres y de las mujeres.

Para calcular las puntuaciones medias de hombres y mujeres tendremos en cuenta que hay 2 hombres en el fichero de datos, ocupando las posiciones 1 y 6 y que hay 4 mujeres en el fichero de datos, ocupando las posiciones 2, 3, 4 y 5.

> media_H = (estudiantes$puntuacion[1] + estudiantes$puntuacion[6])/2
> media_M = (estudiantes$puntuacion[2] + estudiantes$puntuacion[3]
+ + estudiantes$puntuacion[4] + estudiantes$puntuacion[5])/4

>media_H
[1] 8.25

>media_M
[1] 6.625

Resultando que la puntuación media de los hombres es mayor que la de las mujeres.

d) Los datos de las tres variables para el quinto individuo

> estudiantes[5,]
sexo puntuacionopinión
5    M         10       R

e) El logaritmo neperiano de la puntuación del tercer individuo

> log(estudiantes$puntuacion[3])
[1] 0.6931472

f) Comprobar si la puntuación del segundo individuo o del cuarto individuo es superior a 7

> estudiantes$puntuacion[2] > 7 | estudiantes$puntuacion[4] > 7
[1] TRUE



Ejercicios Propuestos

Ejercicio Propuesto 1

En la siguiente tabla se muestra la altura, en metros, de los pinos que componen 4 parcelas de terreno.

\(
\begin{matrix} \hline
{\bf Parcela 1} & {\bf Parcela 2} & {\bf Parcela 3} & {\bf Parcela 4} \\
\hline
7,5 &       12,5 &         11 &       12,5 \\
12 &       10,5 &          8 &         16 \\
14,5 &         13 &        7,5 &        9,5 \\
&          9 &        9,5 &         10 \\
&       18,5 &         19 &            \\
&            &         14 &            \\
\hline
\end{matrix}
\)

 Tabla3. Datos del Ejercicio Propuesto 1

Se pide:

a) Crear 4 vectores numéricos, de manera que cada uno almacene la altura de los pinos de una parcela

b) Agrupar los 4 vectores creados en el apartado anterior en una estructura de datos adecuada, teniendo en cuenta sus características

c) Comprobar, para cada parcela, si la altura del primer pino supera a la del último pino

d) Calcular el logaritmo decimal de la altura del tercer pino de la parcela 3

e) Calcular la suma de las alturas de los 3 primeros pinos de la parcela 4

f) Obtener la altura media de los pinos de la parcela 1.

Ejercicio Propuesto 2

En la siguiente tabla se recoge información sobre el sexo, la tensión arterial y el pulso por minuto de los pacientes atendidos en una clínica a lo largo de un día

\(
\begin{matrix}
\hline
{\bf Sexo} & {\bf Tensión } \hspace{0.1 cm} {\bf arterial} & {\bf Pulso} \\
\hline
Hombre &        119 &         59 \\
Mujer &         99 &         89 \\
Hombre &        102 &        107 \\
Hombre &         78 &         76 \\
Mujer &         78 &         91 \\
\hline
\end{matrix}
\)

Tabla4. Datos del Ejercicio Propuesto 2

a) Elaborar un fichero de texto (con extensión .txt) que contenga la información de la tabla anterior. Utilizar el tabulador para separar la información referente a cada variable. Guárdalo en el escritorio y llamarlo salud.txt

b) Desde R leer el fichero que se acaba de crear y almacenar su contenido en una variable de nombre datos

c) Obtener los valores para las tres variables para el primer y el cuarto individuo

d) Comprobar si la primera mujer (posición 2) tiene una tensión arterial mayor que la segunda mujer (posición 5)

e) Calcular la media del pulso de los hombres

f ) Obtener la raíz cuadrada de la tensión arterial del cuarto individuo.


Ejercicio Propuesto 1 (Resuelto)

En la siguiente tabla se muestra la altura, en metros, de los pinos que componen 4 parcelas de terreno.

\(
\begin{matrix} \hline
{\bf Parcela 1} & {\bf Parcela 2} & {\bf Parcela 3} & {\bf Parcela 4} \\
\hline
7,5 &       12,5 &         11 &       12,5 \\
12 &       10,5 &          8 &         16 \\
14,5 &         13 &        7,5 &        9,5 \\
&          9 &        9,5 &         10 \\
&       18,5 &         19 &            \\
&            &         14 &            \\
\hline
\end{matrix}
\)

 Tabla3. Datos del Ejercicio Propuesto 1

Se pide:

a) Crear 4 vectores numéricos, de manera que cada uno almacene la altura de los pinos de una parcela

> P1
[1]  7.5 12.0 14.0  5.0
> P2
[1] 12.5 10.5 13.0  9.0 18.5
> P3
[1] 11.0  8.0  7.5  9.5 19.0 14.0
> P4
[1] 12.5 16.0  9.5 10.0

b) Agrupar los 4 vectores creados en el apartado anterior en una estructura de datos adecuada, teniendo en cuenta sus características

> pinos
[[1]]
[1]  7.5 12.0 14.0  5.0

[[2]]
[1] 12.5 10.5 13.0  9.0 18.5

[[3]]
[1] 11.0  8.0  7.5  9.5 19.0 14.0

[[4]]
[1] 12.5 16.0  9.5 10.0

> pinos = list(P1, P2, P3, P4)

c) Comprobar, para cada parcela, si la altura del primer pino supera a la del último pino

[1] FALSE

[1] FALSE

[1] FALSE

[1] TRUE

d) Calcular el logaritmo decimal de la altura del tercer pino de la parcela 3

[1] 0.8750613

e) Calcular la suma de las alturas de los 3 primeros pinos de la parcela 4

[1] 38

f) Obtener la altura media de los pinos de la parcela 1

[1] 11.16667

Ejercicio propuesto 1 (resuelto)


Ejercicio Propuesto 2 (Resuelto)

En la siguiente tabla se recoge información sobre el sexo, la tensión arterial y el pulso por minuto de los pacientes atendidos en una clínica a lo largo de un día

\(
\begin{matrix}
\hline
{\bf Sexo} & {\bf Tensión } \hspace{0.1 cm} {\bf arterial} & {\bf Pulso} \\
\hline
Hombre &        119 &         59 \\
Mujer &         99 &         89 \\
Hombre &        102 &        107 \\
Hombre &         78 &         76 \\
Mujer &         78 &         91 \\
\hline
\end{matrix}
\)

Tabla4. Datos del Ejercicio Propuesto 2

Se pide:

a) Elaborar un fichero de texto (con extensión .txt) que contenga la información de la tabla anterior. Utilizar el tabulador para separar la información referente a cada variable. Guárdalo en el escritorio y llamarlo salud.txt

Figura 15. salud.txtFigura 15. salud.txt

b) Desde R leer el fichero que se acaba de crear y almacenar su contenido en una variable de nombre datos

> datos = read.table(“salud.txt”, header = TRUE)

Nota: Utilizar la siguiente orden para situarse en el directorio de trabajo

> setwd(“C:/Users/Usuario/Desktop/nombrecarpeta”)

c) Obtener los valores para las 3 variables para el primer y el cuarto individuo

    Sexo Tension Pulso
1 Hombre     119    59
4 Hombre      78     76

d) Comprobar si la primera mujer (posición 2) tiene una tensión arterial mayor que la segunda mujer (posición 5)

[1] TRUE

e) Calcular la media del pulso de los hombres

[1] 80.66667

f ) Obtener la raíz cuadrada de la tensión arterial del cuarto individuo.

[1] 8.831761

Ejercicio Propuesto 2 (Resuelto)

Ejercicio Propuesto 3 (Grado en Psicología)

Un estudio con 30 sujetos se investigaron las siguientes variables sexo (1: hombre; 2: mujer), Edad, Estado civil (1: soltero; 2: casado; 3: otro) y Cociente Intelectual (CI).

\(
\begin{matrix} \hline
{\bf Suj } & {\bf sexo } & {\bf edad } & {\bf EC } & {\bf CI }\\
\hline
1 &      1          & 16 &           1 &      100 \\ 2 &   2 &      17 &   1 &      103  \\ 3       & 1 &  18 &   1 &      107  \\ 4 &   2 &      19 &   1 &      110  \\ 5 &   1  &     16 &   1 &      99  \\ 6 &   2  &     16  &  1  &     104  \\ 7  &  1  &     17  &  1  &     104  \\ 8       & 2  &            17  &  1  &     99 \\   9  & 1  &            18  &  1  &     100   \\  10 & 2 &      18 &   1 &      100 \\ 11     & 1 &  18 &   1 &      101 \\ 12 & 2          & 19  &          2  &     103 \\ 13 & 1  &     20  &  2  &     107  \\ 14     & 2  &            21  &  2  &     110  \\ 15  &            1  &     14  &  1  &     99  \\ \hline    \end{matrix} \)

\( \begin{matrix} \hline
{\bf Suj } & {\bf sexo } & {\bf edad } & {\bf EC } & {\bf CI }\\
\hline 16 & 1 &      15       & 1  & 101  \\ 17  &            1          & 16  &          1          & 102  \\ 18  &            1  &     16  &  1  &     102  \\ 19  &            1  &     17  &  1  &     103  \\ 20  &            1  &     17  &  1  &     103  \\ 21     &  1  & 20  &  3  &     104   \\  22  &            1  &     19  &  2  &     102  \\ 23     & 1 &  18  &  1  &     100  \\  24     & 2  &            16  &  1  &     105 \\  25 & 2  &     15  &  1  &     109 \\  26  &            2  &     14  &  1  &     110  \\  27     & 2 & 15 &   1 &      108 \\  28 & 2  &     16  &  1  &     105  \\ 29  &            2  &     17  &  1  &     104 \\ 30  &            2  &     21  &  2  &     103  \\ \hline
\end{matrix}
\)

Se pide:

a) Defina las variables del estudio, su nivel de medida, su tipo y sus modalidades y almacena el contenido de la tabla en las variables correspondientes seleccionando el tipo de variable adecuado en cada caso.

b) Realice la distribución de frecuencias de cada variable (Práctica 2)

c) Realice un gráfico para cada una de las variables (Práctica 2)

Ejercicio Propuesto 4 (Grado en Psicología)

Un investigador estaba interesado en conocer la relación entre frecuencia cardíaca (FC) y percepción subjetiva del esfuerzo (PSE). Para ello realizó mediciones a 30 deportistas que practican diversos deportes (individuales o de equipo) a los que con un pulsómetro estableció su FC basal (medida por la mañana) y máxima (medida en una competición) y también midió la PSE tras el partido (en una escala muy alta, alta, media, baja y muy baja). Finalmente les preguntó la edad y el sexo de cada uno de ellos. Los datos de cada sujeto se muestran a continuación.

\(
\begin{matrix} \hline
{\bf Suj } & {\bf sexo } & {\bf edad } & {\bf FCb } & {\bf PSE}  & {\bf Deporte} \\
\hline 1 &    1 &      22 &    66 &    148 &  2 &      1 \\ 2 &    1  &     24  &   56  &   137      & 1 &  1  \\ 3 &    1 &      25 &    64  &   168  & 4  &     1  \\ 4 &    1  &     23  &   63  &   170  & 5  &     1  \\ 5  &   2  &     19  &   62  &   165  & 4  &     1  \\ 6  &   1  &     18  & 62          168      & 3 &  1  \\ 7  &   2  &     20        & 61 &            165 &  3 &      2 \\ 8        & 2 &  22  &   60  &   160  &             3          & 2  \\ 9 &    2  &     24  &   58  &   145  &             2  &     2  \\ 10  & 1  &     25  &   57  &   156  & 4  &     2  \\ 11  &            2  &     27 &    67 &    189 &  5 &      2  \\ 12 &  1  &     24 &    65 &    182 &  4  &     2  \\ 13 &  2 &      23        & 78 &            190 &  5 &      2 \\ 14 &  2  &     22  &   45 &    135  & 1  &     1  \\ 15  &            2          & 28 &            54 &    140  & 2  &     1  \\ \hline \end{matrix} \)

 

\(
\begin{matrix} \hline
{\bf Suj } & {\bf sexo } & {\bf edad } & {\bf FCb } & {\bf PSE}  & {\bf Deporte} \\
\hline 16 &  2  &     19  &   54  &   156  &             3          & 2  \\ 17  & 1  &     20  &   45  &   136  & 1  &     2 \\  18  & 1 &      22 &    50 &    154 &  3 &      2 \\ 19 &  1  &     24  &   51 &    187 &  5 &      2 \\ 20  & 2 &      25 &    52 &    145 &  1 &      2  \\ 21 &  2 &      26 &    60 &    163 &  4 &      2 \\ 22 &  1 &      24 &    59 &    154 &  3 &      1 \\ 23 &  2  &     20  &   60  &   160  & 4  &     1 \\ 24 &  1  &     21  &   55  &   145  & 2  &     1 \\ 25      & 2 &  21 &    54 &    137 &  1 &      1 \\ 26 &  1 &      22  &   53  &   136  & 1  &     1 \\ 27 &  2  &     29  &   52  &   134  &             1          & 1  \\ 28  &            2 &      23 &    51 &    130 &  1 &      1 \\ 29 &  1  &     23  &   55 &    135 &  2 &      2 \\ 30 &  1 &      24 &    58 &    140 &  2 &      2 \\ \hline
\end{matrix}
\)

 

Variables y códigos: Sexo (1: hombre; 2: mujer), Edad, FCb (Frecuencia cardíaca basal), FCm (Frecuencia cardíaca máxima), PSE (Percepción Subjetiva del Esfuerzo; 1: muy baja; 2: baja; 3: media; 4: alta y 5: muy alta), Deporte (1: individual; 2: de equipo).

Se pide:

1.- Defina cada variable: Escala de medida, Tipo y modalidades o valores

2.- Realice una distribución para cada variable y un gráfico adecuado (Práctica 2)

Autores: Ana María Lara Porras,  Beatriz Cobo Rodríguez y David Molina Muñoz. Universidad de Granada  (2019)