2.1 Vectores
Un vector es un conjunto de valores básicos del mismo tipo.
La forma más sencilla de crear vectores es a
través de la función c()
que se usa para combinar (concatenar) valores.
<- c(3, 5, 7)
x x
## [1] 3 5 7
<- c(8, 9)
y y
## [1] 8 9
c(x, y)
## [1] 3 5 7 8 9
<- c("Hola", "Adios")
z z
## [1] "Hola" "Adios"
2.1.1 Generación de secuencias
Existen varias funciones que pemiten obtener secuencias de números
<- 1:5
x x
## [1] 1 2 3 4 5
seq(1, 5, 0.5)
## [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
seq(from=1, to=5, length=9)
## [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
rep(1, 5)
## [1] 1 1 1 1 1
2.1.2 Generación secuencias aleatorias
A continuación se obtiene una simulación de 10 lanzamientos de un dado
sample(1:6, size=10, replace = T) # lanzamiento de un dado
## [1] 2 5 4 3 5 2 5 2 4 2
Para simular el lanzamiento de una moneda podemos escribir
<- c(cara = 1, cruz = 0) # se asignan nombres a los componentes
resultado print(resultado)
## cara cruz
## 1 0
class(resultado)
## [1] "numeric"
attributes(resultado)
## $names
## [1] "cara" "cruz"
names(resultado)
## [1] "cara" "cruz"
<- sample(resultado, size=10, replace = T)
lanz lanz
## cruz cara cara cara cara cara cruz cara cruz cara
## 0 1 1 1 1 1 0 1 0 1
table(lanz)
## lanz
## 0 1
## 3 7
Otros ejemplos
rnorm(10) # rnorm(10, mean = 0, sd = 1)
## [1] 0.7204527 0.4797719 -1.2713440 -0.4328451 -0.4684879 -0.3751133
## [7] 0.5876768 -0.6550503 -0.5821055 -0.3319841
runif(15, min = 2, max = 10)
## [1] 7.501522 5.048121 2.463137 3.060632 2.777952 7.384773 2.312678 3.896351
## [9] 6.227847 2.721850 3.873522 5.734386 9.680021 4.607188 3.401449
Como ya se comentó, se puede utilizar help(funcion)
(o ?funcion
) para mostrar la ayuda de las funciones anteriores.
2.1.3 Selección de elementos de un vector
Para acceder a los elementos de un vector se indica entre corchetes el correspondiente vector de subíndices (enteros positivos).
<- seq(-3, 3, 1)
x x
## [1] -3 -2 -1 0 1 2 3
1] # primer elemento x[
## [1] -3
<- c(1, 5, 7)
ii # posiciones 1, 5 y 7 x[ii]
## [1] -3 1 3
<- x > 0
ii ii
## [1] FALSE FALSE FALSE FALSE TRUE TRUE TRUE
# valores positivos x[ii]
## [1] 1 2 3
<- 1:3
ii -ii] # elementos de x salvo los 3 primeros x[
## [1] 0 1 2 3
2.1.4 Ordenación de vectores
<- c(65, 18, 59, 18, 6, 94, 26)
x sort(x)
## [1] 6 18 18 26 59 65 94
sort(x, decreasing = T)
## [1] 94 65 59 26 18 18 6
Otra posibilidad es utilizar un índice de ordenación.
<- order(x)
ii # índice de ordenación ii
## [1] 5 2 4 7 3 1 6
# valores ordenados x[ii]
## [1] 6 18 18 26 59 65 94
La función rev()
devuelve los valores del vector en orden inverso.
rev(x)
## [1] 26 94 6 18 59 18 65
2.1.5 Datos faltantes
Los datos faltantes (también denominados valores perdidos) aparecen normalmente cuando algún dato no ha sido registrado.
Este tipo de valores se registran como NA
(abreviatura de Not Available).
Por ejemplo, supongamos que tenemos registrado las alturas de 5 personas pero desconocemos la altura de la cuarta persona. El vector sería registrado como sigue:
<- c(165, 178, 184, NA, 175)
altura altura
## [1] 165 178 184 NA 175
Es importante notar que cualquier operación aritmética sobre un vector
que contiene algún NA
dará como resultado otro NA
.
mean(altura)
## [1] NA
En muchas funciones para forzar a R
a que ignore los valores perdidos se utiliza la opción na.rm = TRUE
.
mean(altura, na.rm = TRUE)
## [1] 175.5
R
permite gestionar otros tipos de valores especiales:
NaN
(Not a Number): es resultado de una indeterminación.Inf
:R
representa valores no finitos \(\pm \infty\) comoInf
y-Inf
.
5/0 # Infinito
## [1] Inf
log(0) # -Infinito
## [1] -Inf
0/0 # Not a Number
## [1] NaN
2.1.6 Vectores no numéricos
Los vectores pueden ser no numéricos, aunque todas las componentes deben ser del mismo tipo:
<- c("A Coruña", "Lugo", "Ourense", "Pontevedra")
a a
## [1] "A Coruña" "Lugo" "Ourense" "Pontevedra"
1:10] # primeras 10 letas del abecedario letters[
## [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
1:10] # lo mismo en mayúscula LETTERS[
## [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J"
1:6] # primeros 6 meses del año en inglés month.name[
## [1] "January" "February" "March" "April" "May" "June"
2.1.7 Factores
Los factores se utilizan para representar datos categóricos.
Se puede pensar en ellos como vectores de enteros en los que cada entero tiene asociada una etiqueta (label).
Los factores son muy importantes en la modelización estadística ya que R
los trata de forma especial.
Utilizar factores con etiquetas es preferible a utilizar enteros porque las etiquetas son auto-descriptivas.
Veamos un ejemplo. Supongamos que el vector sexo
indica el sexo de un persona codificado como 0 si hombre y 1 si mujer
<- c(0, 1, 1, 1, 0, 0, 1, 0, 1)
sexo sexo
## [1] 0 1 1 1 0 0 1 0 1
table(sexo)
## sexo
## 0 1
## 4 5
El problema de introducir así los valores es que no queda reflejada la codificación de los mismos. Para ello guardaremos los datos en una estructura tipo factor:
<- factor(sexo, labels = c("hombre", "mujer")); sexo2 sexo2
## [1] hombre mujer mujer mujer hombre hombre mujer hombre mujer
## Levels: hombre mujer
levels(sexo2) # devuelve los niveles de un factor
## [1] "hombre" "mujer"
unclass(sexo2) # representación subyacente del factor
## [1] 1 2 2 2 1 1 2 1 2
## attr(,"levels")
## [1] "hombre" "mujer"
table(sexo2)
## sexo2
## hombre mujer
## 4 5
Veamos otro ejemplo, en el que inicialmente tenemos datos categóricos. Los niveles se toman automáticamente por orden alfabético
<- factor(c('si', 'si', 'no', 'si', 'si', 'no', 'no'))
respuestas respuestas
## [1] si si no si si no no
## Levels: no si
Si deseásemos otro orden (lo cual puede ser importante en algunos casos, por ejemplo para representaciones gráficas), habría que indicarlo expresamente
<- factor(c('si', 'si', 'no', 'si', 'si', 'no', 'no'), levels = c('si', 'no'))
respuestas respuestas
## [1] si si no si si no no
## Levels: si no