Vectores en R

Vectores en R

Los vectores son objetos de una única dimensión que puede contener datos numéricos, cadena de caracteres o datos lógicos, entre otros.

Función c() y tipos de vectores

Los vectores se generan en R usando la función c(), que proviene de combine. Los elementos situados dentro del paréntesis tienen que estar separados por comas. Si son caracteres, hay que poner cada elemento entre comillas, y si son lógicos o booleanos hay que escribir TRUE y/o FALSE en mayúsculas y sin comillas. Igual pasa con los vectores numéricos, que no llevan comillas. Veamos estos tres tipos de vectores.

vector_numerico <- c(1, 3, 5, 7)      # vector numérico
vector_texto <- c("a", "b", "c", "d") # vector de texto
vector_logico <- c(TRUE, FALSE, TRUE) # vector lógico / booleano

Nombrar los elementos de un vector con la función names()

Vamos a dar nombre a cada elemento dentro de un vector. Para ello, usemos el siguiente ejemplo:

# Generamos un vector de 12 elementos llamado "orden_meses"
orden_meses <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)

# También podemos acortar el código anterior poniendo 1:12
orden_meses <- c(1:12)

# Vemos el vector
orden_meses
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12

Para indicarle ahora que el 1 le corresponde el nombre de enero, y así sucesivamente hasta diciembre, utilizamos la función names(), indicando dentro del paréntesis el nombre del vector al que queremos dar nombres.

names(orden_meses) <- c("Ene", "Feb", "Mar", 
                        "Abr", "May", "Jun", 
                        "Jul", "Ago", "Sep", 
                        "Oct", "Nov", "Dic")

# Vemos nuevamente el vector "orden_meses"
orden_meses
## Ene Feb Mar Abr May Jun Jul Ago Sep Oct Nov Dic 
##   1   2   3   4   5   6   7   8   9  10  11  12
# Simplificando código, podemos crear un vector con los nombres de los meses...
meses <- c("Ene", "Feb", "Mar", 
           "Abr", "May", "Jun", 
           "Jul", "Ago", "Sep", 
           "Oct", "Nov", "Dic")

#...y después ejecutar la función "names()"
names(orden_meses) <- meses

Operaciones aritméticas entre vectores

Realizar operaciones aritméticas (suma, resta, multiplicación y división) con vectores es muy sencillo. Para ello, vamos a crear dos vectores con el nombre Vector_1 y Vector_2.

Vector_1 <- c(1, 2, 3)
Vector_2 <- c(4, 5, 6)

Ahora vamos a realizar operaciones aritméticas entre estos dos vectores, incluyendo la suma, la resta, la multiplicación y la división. Es muy importante destacar que estas operaciones aritméticas se producen entre los valores situados en una misma posición dentro de los vectores respectivos. Es devir, el primer elemento del Vector_1 (1) se relaciona con el primer elemento del Vector_2 (4). Si fuese una suma, el resultado de esta primer elemento sería 5. Este proceso se repite sucesivamente con el resto de los elementos de los vectores.

Vector_1 + Vector_2 # suma de los dos vectores
## [1] 5 7 9
Vector_1 - Vector_2 # resta de los dos vectores
## [1] -3 -3 -3
Vector_1 / Vector_2 # división de los dos vectores
## [1] 0.25 0.40 0.50
Vector_1 * Vector_2 # multiplicación de los dos vectores
## [1]  4 10 18

Podemos guardar el resultado de estas operaciones aritméticas creando nuevos objetos, que llamaremos suma_vect, resta_vect, div_vect y multip_vect. Estos objetos se corresponden con la suma, la resta, la división y la multiplicación de vectores, respectivamente.

suma_vect   <- Vector_1 + Vector_2 # suma de los dos vectores
resta_vect  <- Vector_1 - Vector_2 # resta de los dos vectores
div_vect    <- Vector_1 / Vector_2 # división de los dos vectores
multip_vect <- Vector_1 * Vector_2 # multiplicación de los dos vectores
  
# Vemos los resultados
suma_vect
## [1] 5 7 9
resta_vect
## [1] -3 -3 -3
div_vect
## [1] 0.25 0.40 0.50
multip_vect
## [1]  4 10 18

Es interesante destacar que el resultado de realizar operaciones aritméticas entre vectores nos devuelve un objeto que también es un vector.

Comparación lógica de vectores

# Comparamos si los valores de multiplicación son mayores que los de la suma
# Esto nos devuelve un resultado lógico por tantos elementos existan
multip_vect > suma_vect
## [1] FALSE  TRUE  TRUE

Sumando los elementos de un vector con la función sum()

Si quisiéramos sumar todos los elementos situados dentro de un único vector, tendremos que usar la función sum().

# Vamos a sumar los 4 vectores obtenidos en el ejemplo anterior
sum(suma_vect)
## [1] 21
sum(resta_vect)
## [1] -9
sum(div_vect)
## [1] 1.15
sum(multip_vect)
## [1] 32

Seleccionar elementos de un vector

A diferencia de otros lenguajes de programación, como Python, en R el primer elemento lleva el valor de 1, y no de 0. Para seleccionar un elemento de un vector, tenemos que poner el nombre del vector más un corchete [] con la posición del elemento en cuestión.

Vector_1[2]       # seleccionamos el segundo elemento del Vector_1
## [1] 2
Vector_1[3]       # seleccionamos el tercer elemento del Vector_1
## [1] 3
Vector_2[1:2]     # seleccionamos el intervalo entre la posición 1 y 3 del Vector_2
## [1] 4 5
Vector_2[c(1, 3)] # seleccionamos el primer y el tercer elemento del Vector_2
## [1] 4 6

Podemos a su vez dar nombre a cada uno de las selecciones realizadas para recurrir a ellas en el futuro de un modo más rápido.

seleccion_1 <- Vector_1[2]      
seleccion_2 <- Vector_1[3]    
seleccion_3 <- Vector_2[1:2]    
seleccion_4 <- Vector_2[c(1, 3)]

Selección usando operadores de comparación

TEnemos que distinguir 6 tipos de operadores:

  • <. Menor que.
  • >. Mayor que.
  • <=. Menor o igual que.
  • >=. Mayor o igual que.
  • ==. Igual que.
  • !=. Distinto que.
# Vemos si los elementos de un vector son mayores que 20
c(15, 24, 21, 18) > 20
## [1] FALSE  TRUE  TRUE FALSE
# Si le llamamos al vector anterior como "horas", queremos ver cuáles están por debajo de 20
horas <- c(15, 24, 21, 18)
horas < 20
## [1]  TRUE FALSE FALSE  TRUE

Como vemos, el resultado de la selección vista nos devuelve un resultado lógico TRUE o FALSE. ¿Y si queremos ver sus valores?

horas <- c(15, 24, 21, 18) # mismo vector con las horas
horas_20 <- horas < 20     # llamamos a la selección de horas menores de 20 como "horas_20"
horas[horas_20]            # al vector original le seleccionamos los valores seleccionados "horas_20"
## [1] 15 18

Si damos nombre a cada uno de los elementos con otro vector, podemos seleccionarlo a través del nombre y no de la posición.

# Generamos un vector con nombre "dias" con los nombres de las posiciones
dias <- c("Lunes", "Martes", "Miércoles")

# Ejecutamos la función "names()" con el nombre del vector en paréntesis
names(Vector_1) <- dias

# Seleccionamos elementos del vector en base al nombre y no la posición.
Vector_1["Lunes"]
## Lunes 
##     1
Vector_1[c("Lunes", "Miércoles")]
##     Lunes Miércoles 
##         1         3

head() y tail() de un vector

Si tuviésemos un vector de una longitud considerable, nos interesaría ver solo los datos del comienzo con head() o del final con tail().

# Generamos un vector
vector <- c(2, 4, 3, 5, 6, 2, 3, 4, 1, 5, 3, 5, 2, 4)

# Vemos su cabecera y su final
head(vector) # te saca de modo predeterminado los 6 primeros valores
## [1] 2 4 3 5 6 2
tail(vector) # te saca de modo predeterminado los 6 últimos valores
## [1] 1 5 3 5 2 4
# Seleccionamos el número de elementos a mostrar
head(vector, 3) # nos saca los 3 primeros valores
## [1] 2 4 3
tail(vector, 4) # nos saca los 4 últimos valores
## [1] 3 5 2 4