15.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"
15.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
15.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 3 6 2 6 6 4 6 3 2
Para simular el lanzamiento de una moneda podemos escribir
<- c(cara=1,cruz=0) # se le han asignado nombres al objeto
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
## cara cruz cruz cara cara cruz cara cruz cruz cruz
## 1 0 0 1 1 0 1 0 0 0
table(lanz)
## lanz
## 0 1
## 6 4
Otros ejemplos
rnorm(10) # rnorm(10, mean = 0, sd = 1)
## [1] 0.49970320 0.85600027 0.22348053 -1.04091214 -0.09096274 0.38241536
## [7] -0.98295854 1.27289321 0.28518504 0.51844945
runif(15, min = 2, max = 10)
## [1] 4.033063 7.943182 7.190573 8.566533 3.625957 3.171083 7.570823 6.856241
## [9] 6.811864 7.370427 7.401901 7.852309 3.311199 4.622022 2.411340
El lector puede utilizar la función help()
para obtener la ayuda de las funciones
anteriores.
15.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
15.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
15.1.5 Valores perdidos
Los valore 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
Para forzar a R
a que ignore los valores perdidos se utliza 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
15.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"
15.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 datos es que no queda reflejado la etiquetació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