Práctica 1 - R
Práctica 1 - R
Práctica 1 - R
Tipos de datos
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.
Para crear una variable de tipo double (Datos de tipo real), basta con definir un valor numérico
cualquiera.
> 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 #.
[1] 4
[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”
[1] “5 + 6”
> 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
>a
[1] 4
>b
[1] 6
>c
[1] 2
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] TRUE
sin(x) : Seno de x
cos(x) : Coseno de x
tan(x) : Tangente 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.
Vectores: Para crear un vector se utiliza la función c, que concatena todos los elementos que
recibe como argumentos.
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.
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.
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.
Vectores
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
,,2
[,1] [,2]
[1,] 5 7
[2,] 6 8
Matrices
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
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.
[1] 14
> 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]
3
[1,] 1
[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
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
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
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
> x <- 1:4; n <- 10; M <- c(10, 35); y <- 2:5 ; x; n; M; y
> data.frame(x, n)
> data.frame(x, M)
> data.frame(x, y)
> l1 <- list(x, y); l2 <- list(A = x, B = y) ; l1; l2
> names(l1)
> names(l2)
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:
Raza Edad P eso Altura
Blanca 24 58 156
N egra 26 62 175
Blanca 62 61 169
Blanca 31 67 171
N egra 30 71 159
N egra 41 69 160
N egra 51 68 158
Blanca 23 73 178
Blanca 28 56 168
Blanca 30 82 156
c) Obtener los valores para las 4 variables para el tercer y el séptimo 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
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)
M ujer 8 Regular
M ujer 2 M ala
M ujer 10 Regular
Hombre 9 Buena
b) Crear un data frame de nombre Estudiantes que contenga la información de las tres
variables creadas
Blanca 24 58 156
N egra 26 62 175
Blanca 62 61 169
Blanca 31 67 171
N egra 30 71 159
N egra 41 69 160
N egra 51 68 158
Blanca 23 73 178
Blanca 28 56 168
Blanca 30 82 156
Se pide:
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
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
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
c) Obtener los valores para las 4 variables para el tercer y el séptimo individuo
> datos[c(3,7),]
Raza Edad Peso
Altura
3 Blanca 62 61 169
> 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
f) Comprobar si el peso conjunto de los dos primeros individuos es menor que el peso
conjunto de los dos últimos
> sqrt(datos$Altura[5])
[1] 12.60952
M ujer 8 Regular
M ujer 2 M ala
M ujer 10 Regular
Hombre 9 Buena
Se pide:
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
> 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
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
[1] 8.25
>media_M
[1] 6.625
Resultando que la puntuación media de los hombres es mayor que la de las mujeres.
>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
Ejercicios Propuestos
Ejercicio Propuesto 1
En la siguiente tabla se muestra la altura, en metros, de los pinos que componen 4 parcelas
de terreno.
12 10.5 8 16
9 9.5 10
18.5 19
14
Se pide:
a) Crear 4 vectores numéricos, de manera que cada uno almacene la altura de los pinos de
una parcela
c) Comprobar, para cada parcela, si la altura del primer pino supera a la del último pino
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
Sexo T ensión arterial P ulso
Hombre 119 59
M ujer 99 89
Hombre 78 76
M ujer 78 91
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)
12 10.5 8 16
9 9.5 10
18.5 19
14
Se pide:
a) Crear 4 vectores numéricos, de manera que cada uno almacene la altura de los pinos de
una parcela
> P1
12.0 14.0 5.0
[1] 7.5
> P2
> 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
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
[1] 0.8750613
[1] 38
[1] 11.16667
Hombre 119 59
M ujer 99 89
Hombre 78 76
M ujer 78 91
Se pide:
> setwd(“C:/Users/Usuario/Desktop/nombrecarpeta”)
c) Obtener los valores para las 3 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)
[1] TRUE
[1] 80.66667