Vectores

Vector (programación)

En programación un vector es un arreglo unidimensional que contiene elementos de un solo tipo. En seguida se muestra un vector con 6 números, para acceder a los números tendríamos que indicar la posición del número que queremos.

En R las posiciones de los elementos de un vector comienzan por el número 1 como se muestra en el vector de ejemplo.

El largo de un vector indica el número de elementos que contiene, en el ejemplo tenemos que el largo del vector es de 6.

Vectores en R

Función c() (combinar)

Mediante la función c() podemos combinar valores y crear un vector.

## Combinar números para formar un vector 
c(3,10,6,5,7)
## Podemos asignar el vector a una variable 
vec_num <- c(3,10,6,5,7)
## Para crear un vector de caracteres se deben ingresar las variables entre comillas 
vec_char <- c("A","K","Z","V","X")
## También se pueden crear vectores lógicos 
vec_log <- c(FALSE,FALSE,TRUE,FALSE,TRUE)

También se pueden agregar nuevos elementos a un vector y combinar más de dos vectores.

vec_num_1 <- c(3,10,6,5,7)
## Agregar nuevos elementos a un vector 
c(vec_num_1,10,6)
## Combinar los dos vectores anteriores
vec_num_2 <- c(15,20,13)   
c(vec_num_1, vec_num_2)

La función typeof() se utiliza para conocer el tipo o modo de almacenamiento de cualquier objeto.

## Conocer con que tipo de objeto estamos trabajando  
typeof(vec_num)

Recordemos que los vectores solo pueden contener elementos de un solo tipo. En R podemos almacenar números como caracteres, pero no podemos guardar caracteres como números. También podemos combinar números y caracteres en un vector, pero R los guardará como caracteres.

## Vector numérico como carácter 
vec_num_as_char <- c("3","10","6","5","7")
## Combinar números con caracteres 
vec_num_and_char <- c("A",10,7,"V",5)

Coerción Explícita

En programación la coerción permite convertir, implícita o explícitamente, un objeto a otro. Para convertrir un vector numérico a carácter se puede utilizar la función as.character() y para convertir nuevamente a número se utiliza la función as.numeric().

## Transformar un vector numérico a carácter 
vec_num_as_char <- as.character(vec_num)
## Transformar un vector de carácter a numérico 
vec_char_and_num <- as.numeric(vec_num_as_char)

Crear vectores de elementos consecutivos

También podemos crear vectores numéricos con el operador :, el cual generará una secuencia de números que va del primer valor hasta el segundo valor.

## Generar un vector del 1 al 5 
1:5
## Crear un vector que va del 10 al 30 y asignarlo a una variable 
vec_num <- 10:30

La función seq() es más flexible que el operador :, ya que permite especificar de qué manera se hará el incremento.

## Es similar al operador :  
seq(5)
seq(1,10)
## La diferencia es que podemos elegir cómo será el incremento  
seq(from = 3, to = 15, by = 3)

Nota: R contiene un paquete base de funciones library(help = "base"), estas pueden ser simples (un solo argumento) o más complejas (más argumentos). Por ejemplo, en la función seq() se pueden utilizar varios argumentos (Pedir ayuda a R - ?seq)

La función rep() replica valores numéricos, o texto, o los valores de un vector para un número específico de veces.

## Podemos repetir números o caracteres   
rep(5, times = 10)
rep("gato", times = 5)
## Se puede repetir un vector completo
rep(c(3,10,6), times = 3)
## Se puede repetir n veces cada elemento del vector
rep(c(3,10,6), each = 3)
## Podemos hacer que cada elemento del vector se repita n veces independientemente 
rep(c("gato","perro","pez"), times = c(3,5,2))

Longitud de un vector

Para conocer la longitud de un vector (cuántos elementos contiene) se utiliza la función length().

## Longitud de un vector 
vec_num <- 10:30
length(vec_num)

Acceder a los elementos de un vector

Se puede acceder a los elementos de un vector mediante indexación vectorial utilizando los corchetes []. El índice vectorial en R comienza desde 1, a diferencia de la mayoría de los lenguajes de programación donde el índice comienza desde 0.

vec_num <- c(3,10,6,5,7)
## Acceder al tercer elemento
vec_num[3]
## Acceder a los elementos que este de la segunda posición a la cuarta 
vec_num[2:4]
## Acceder a la primera, tercera y quinta posición 
vec_num[c(1,3,5)]
##  Selecciona todos los elementos excepto el tercero
vec_num[-3]
##  Filtra los elemento menores a 5
vec_num[vec_num < 5]
##  Filtra los elemento menores o iguales a 5
vec_num[vec_num <= 5]

Operaciones aritméticas con vectores

Las operaciones aritméticas con vectores se pueden realizan elemento por elemento.

x <- c(3,10,6,5,7)
## Sumar 5 a cada elemento del vectores
x + 5
## Multiplicar cada elemento por 5
x * 5
## Sumar dos vectores con la misma longitud
y <- c(2,5,3,7,9)
x + y
## Cuando los vectores tienen longitudes diferentes y el mayor es múltiplo del menor se reciclan los números del menor
x <- c(2,5) 
y <- c(6,5,3,7,9,11)
x + y

También podemos realizar otras operaciones con vectores numéricos mediante funciones.

Función Operación
sum() Suma
prod() Multiplicación
sqrt() Raíz cuadrada
exp() Exponencial
log() Logaritmo natural
log10() Logaritmo base 10
sin() Seno
cos() Coseno
tan() Tangente
mean() Media
sd() Desviación estándar
vec_num <- c(3,10,6,5,7)
## Obtener la media y desviación estándar
mean(vec_num)
sd(vec_num)
## Si el vector contiene elementos ausentes (NA) o no numéricos (NaN) el resultado será NA
vec_num <- c(3,NA,6,5,7)
mean(vec_num)
## Para ignorar los elementos NA o NaN se utiliza el argumento na.rm=TRUE
mean(vec_num, na.rm = TRUE)

Ordenar vectores

Para ordenar los elementos de un vector en forma ascendente o descendente se utiliza la función sort().

vec_num <- c(3,10,6,5,7)
vec_char <- c("C","L","A","Z","J")
## Ordenar de forma ascendente
sort(vec_num)
sort(vec_char)
## Ordenar de forma descendente
sort(vec_num, decreasing = TRUE)
sort(vec_char, decreasing = TRUE)

Para trabajar de una manera más sencilla las variables cualitativas en R podemos convertirlas a factores. Los factores son los objetos que se utilizan para categorizar los datos y almacenarlos como niveles.

## Crear un vector con algunos meses del año
meses <- rep(c("diciembre","febrero","octubre","enero","abril"), times = 3)
## Ver que clase de objeto es el vector meses
class(meses)
## Transformar el vector meses a factor
meses <- factor(meses)
## Corroborar que el vector meses se transformó a factor 
class(meses)
## Conocer los niveles del vector meses 
levels(meses)
## ordenar los niveles del vector meses
meses <- ordered(meses, levels = c("enero","febrero","abril","octubre","diciembre"))
levels(meses)