Crear 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.

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

Elementos de un vector

Se pueden relacionar dos vectores a y b con el comando names().

Ejemplo:

se toman dos vectores uno conteniendo la cantidad de números del 1 al 12. Se puede crear el objeto meses de dos formas.

# También podemos acortar el código anterior poniendo 1:12
meses <- c(1:12)
# Vemos el vector
meses
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12

Ahora, para relacionar el vector conformado por números y relacionar a cada numero con los meses del año, se debe realizar la siguiente operación.

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

# Vemos nuevamente el vector "orden_meses"
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

Operaciones entre vectores

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

V_1 <- c(1, 2, 3, 2, 4, 1)
V_2 <- c(4, 5, 6, 5, 7, 9)

V_1 + V_2 # suma de los dos vectores
## [1]  5  7  9  7 11 10
V_1 - V_2 # resta de los dos vectores
## [1] -3 -3 -3 -3 -3 -8
V_1%*%V_2 # producto escalar
##      [,1]
## [1,]   79

Multiplicación

En la multiplicación se definieron dos operaciones básicas. Multiplicación por escalar y multiplicación escalar. Aunque R realiza la operación de multiplicación componente a componente, esta operación no esta definida en el algebra de vectores.

V_P <- V_1 * V_2 # multiplicación de los dos vectores
V_P
## [1]  4 10 18 10 28  9
sum(V_P)
## [1] 79

División

La división entre vectores no es una operación matemática definida en el algebra de vectores, dado que el producto escalar o vectorial de dos vectores podría dar cero y ninguno de los dos vectores tiene que ser cero. Sin embargo, R realiza la operación división entre vectores dividiendo componente a componente los dos vectores.

V_1 / V_2 # división de los dos vectores
## [1] 0.2500000 0.4000000 0.5000000 0.4000000 0.5714286 0.1111111

Vectorización de operaciones

Existen algunas operaciones al aplicarlas a un vector, se aplican a cada uno de sus elementos. A este proceso le llamamos vectorización.

Las operaciones aritméticas y relacionales pueden vectorizarse. Si las aplicamos a un vector, la operación se realizará para cada uno de los elementos que contiene.

V_3 <- c(1,3,4,5,6,7,8,3,4,5,9)
V_3 + 3
##  [1]  4  6  7  8  9 10 11  6  7  8 12
V_3 * 3
##  [1]  3  9 12 15 18 21 24  9 12 15 27
V_3 %% 3
##  [1] 1 0 1 2 0 1 2 0 1 2 0
V_3 > 3
##  [1] FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE
V_3 < 3
##  [1]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
V_3 == 3
##  [1] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE

Asignación de vectores

Vectores pueden ser usados en expresiones aritméticas, en las cuales cada operación es llevada a cabo elemento por elemento.

x<-c(1,2,3,4,5)
x
## [1] 1 2 3 4 5
assign("y", c(45.1, 2.9, 9.2, 5.7, 87.2))
y
## [1] 45.1  2.9  9.2  5.7 87.2
13:2 -> z
z
##  [1] 13 12 11 10  9  8  7  6  5  4  3  2
a <- c(x,0,y)
a
##  [1]  1.0  2.0  3.0  4.0  5.0  0.0 45.1  2.9  9.2  5.7 87.2

Aritmetica de vectores

Vectores pueden ser usados en expresiones aritméticas, en las cuales cada operación es llevada a cabo elemento por elemento.

y1 <- c(x, 0, x)
y1
##  [1] 1 2 3 4 5 0 1 2 3 4 5
v <- 2*x + y + 1 # operaciones entre vectores
v
## [1] 48.1  7.9 16.2 14.7 98.2
sum((x-mean(x))^2)/(length(x)-1) # cálculo de la varianza por formula
## [1] 2.5
var(x) # comando base de R
## [1] 2.5

Generación secuencias

Existen diferentes formas de gnerar seceuncias de numeros en R

sa<-1:30
sa
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
## [26] 26 27 28 29 30
s1<-30:1
s1
##  [1] 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6
## [26]  5  4  3  2  1
s2<-2*1:15
s2
##  [1]  2  4  6  8 10 12 14 16 18 20 22 24 26 28 30
n=20

a1 <- 1:n-1
a1
##  [1]  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19
b1 <- 1:(n-1)
b1
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19
seq(-5, 5, by=.2) -> s3
s3
##  [1] -5.0 -4.8 -4.6 -4.4 -4.2 -4.0 -3.8 -3.6 -3.4 -3.2 -3.0 -2.8 -2.6 -2.4 -2.2
## [16] -2.0 -1.8 -1.6 -1.4 -1.2 -1.0 -0.8 -0.6 -0.4 -0.2  0.0  0.2  0.4  0.6  0.8
## [31]  1.0  1.2  1.4  1.6  1.8  2.0  2.2  2.4  2.6  2.8  3.0  3.2  3.4  3.6  3.8
## [46]  4.0  4.2  4.4  4.6  4.8  5.0
s4 <- seq(length=51, from=-5, by=.2)
s4
##  [1] -5.0 -4.8 -4.6 -4.4 -4.2 -4.0 -3.8 -3.6 -3.4 -3.2 -3.0 -2.8 -2.6 -2.4 -2.2
## [16] -2.0 -1.8 -1.6 -1.4 -1.2 -1.0 -0.8 -0.6 -0.4 -0.2  0.0  0.2  0.4  0.6  0.8
## [31]  1.0  1.2  1.4  1.6  1.8  2.0  2.2  2.4  2.6  2.8  3.0  3.2  3.4  3.6  3.8
## [46]  4.0  4.2  4.4  4.6  4.8  5.0
s5 <- rep(x, times=5)
s5
##  [1] 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
s6 <- rep(x, each=5)
s6
##  [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5

Indexación de vectores

Para acceder a posiciones particulares de un vector, se utiliza el operador [ ], dentro de los cuales se indica la(s) posicion(es) que se desea(n) acceder.

s7 <- 100:1
s7[25]
## [1] 76
s7[56:72]
##  [1] 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29
s7[seq(20,80,by=3)]
##  [1] 81 78 75 72 69 66 63 60 57 54 51 48 45 42 39 36 33 30 27 24 21
s7[-2]
##  [1] 100  98  97  96  95  94  93  92  91  90  89  88  87  86  85  84  83  82  81
## [20]  80  79  78  77  76  75  74  73  72  71  70  69  68  67  66  65  64  63  62
## [39]  61  60  59  58  57  56  55  54  53  52  51  50  49  48  47  46  45  44  43
## [58]  42  41  40  39  38  37  36  35  34  33  32  31  30  29  28  27  26  25  24
## [77]  23  22  21  20  19  18  17  16  15  14  13  12  11  10   9   8   7   6   5
## [96]   4   3   2   1
s7[-5]
##  [1] 100  99  98  97  95  94  93  92  91  90  89  88  87  86  85  84  83  82  81
## [20]  80  79  78  77  76  75  74  73  72  71  70  69  68  67  66  65  64  63  62
## [39]  61  60  59  58  57  56  55  54  53  52  51  50  49  48  47  46  45  44  43
## [58]  42  41  40  39  38  37  36  35  34  33  32  31  30  29  28  27  26  25  24
## [77]  23  22  21  20  19  18  17  16  15  14  13  12  11  10   9   8   7   6   5
## [96]   4   3   2   1
s7[-1:-3]
##  [1] 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 81 80 79 78 77 76 75 74 73
## [26] 72 71 70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48
## [51] 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23
## [76] 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1
s7[-3:-1]
##  [1] 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 81 80 79 78 77 76 75 74 73
## [26] 72 71 70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48
## [51] 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23
## [76] 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1

Gráfica de un vector

Representación gráfica de un vector 2D con el comando plot y arrow:

plot(3,1, xlim=c(0,5), ylim=c(0,5), xlab="x", ylab="y", lwd=3, ,col='red', bty='n')
arrows(0,0,3,1,col='red')

Grafica de la suma

Como se explica, por ejemplo la suma, entre dos vectores desde una perspectiva cartesiana? Veamos con un ejemplo (en este caso en 2D) utilizando R y los comandos: plot, points y arrow

plot(3,1, xlim=c(0,5), ylim=c(0,5), xlab="x", ylab="y", lwd=3, ,col='red', bty='n')
arrows(0,0,3,1,col='red')

# El segundo vector es w = (x = 1, y = 3):
points(1,3,lwd=3,col='blue')
arrows(0,0,1,3,col='blue')

# El vector v + w = (x = 3 + 1, y = 1 + 3):
points(4,4,lwd=3,col='green')
arrows(0,0,4,4,col='green')

# Esta operación de suma se puede ver como:
arrows(1,3,4,4,col='red',lty=3)
arrows(3,1,4,4,col='blue',lty=3)

Funciones dim y length

a <- 1:30 # a es un vector con 30 elementos
a; length(a); # se ve el vector y la longitud
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
## [26] 26 27 28 29 30
## [1] 30
dim(a) <- c(6,5); a # Redimensiona el vector, lo pone como una matrix
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    7   13   19   25
## [2,]    2    8   14   20   26
## [3,]    3    9   15   21   27
## [4,]    4   10   16   22   28
## [5,]    5   11   17   23   29
## [6,]    6   12   18   24   30
c <- array(1,c(5,8));c # nuevos objetos llamados matrices dimension 5x8
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## [1,]    1    1    1    1    1    1    1    1
## [2,]    1    1    1    1    1    1    1    1
## [3,]    1    1    1    1    1    1    1    1
## [4,]    1    1    1    1    1    1    1    1
## [5,]    1    1    1    1    1    1    1    1
d <- array(5,c(3,5,2)); d # imprime dos matrices de dimension 3x5
## , , 1
## 
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    5    5    5    5    5
## [2,]    5    5    5    5    5
## [3,]    5    5    5    5    5
## 
## , , 2
## 
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    5    5    5    5    5
## [2,]    5    5    5    5    5
## [3,]    5    5    5    5    5

Preguntas

  1. Imagina que estás registrando las temperaturas promedio de los primeros 6 meses del año: 15, 18, 20, 23, 27, y 30 grados. Crea un vector que contenga estas temperaturas en R. Luego, añade 2 grados a cada valor del vector para simular el cambio climático. ¿Cómo lo harías?

  2. Imagina que estás siguiendo un programa de entrenamiento. Tus tiempos de carrera (en minutos) por día durante una semana son los siguientes: c(35, 30, 28, 27, 26, 25, 24). Crea un vector que almacene estos tiempos. Luego, grafica el progreso usando una línea para visualizar la mejora en los tiempos a lo largo de la semana.

  3. Tienes una secuencia de números del 1 al 20 y quieres crear una secuencia de solo los números pares en R. Usa la función seq() para generar esta secuencia. Después, grafica los números pares en el eje x y sus cuadrados en el eje y.

  4. Supón que estás analizando el crecimiento de una población en los primeros 12 meses del año, con una cantidad inicial de 100 personas y un crecimiento mensual de 10 personas. Crea un vector que represente la población en cada mes y grafícalo para ver el crecimiento.

  5. Para un experimento, necesitas crear un vector que contenga los números del 10 al 100 en intervalos de 10. ¿Cómo lo harías usando la función seq() en R? Luego, suma 5 a cada valor del vector y crea un gráfico que represente el resultado de la operación.

  6. Imagina que estás comparando los ingresos semanales de dos trabajadores. Uno gana $400 y recibe un aumento de $50 cada semana. El otro gana $350 y recibe un aumento de $60 cada semana. Crea dos vectores que representen los ingresos de cada trabajador durante 10 semanas. Luego, grafica ambas series de ingresos para comparar su evolución.

  7. Tienes los siguientes datos de las ventas mensuales de una tienda en miles de dólares: 50, 60, 70, 55, 80, 90, 85, 95, 100, 110, 120, 130. Crea un vector en R que almacene estos valores y nómbralo ventas. Luego, genera un gráfico de barras que represente estas ventas mensuales. Usa la funcion barplot de R para generar el codigo de barras.

  8. Supón que tienes dos vectores que representan la cantidad de productos vendidos en dos tiendas diferentes a lo largo de una semana: tienda1 <- c(10, 20, 15, 25, 30, 40, 35) y tienda2 <- c(5, 15, 10, 20, 25, 30, 45). Suma los vectores para obtener las ventas combinadas por día. ¿Cómo harías el gráfico de barras para mostrar las ventas diarias de ambas tiendas?