Vectores con R

Un conjunto de datos, como los ingresos mensuales de 10 empleados, el crédito de 5 cursos, los nombres de mis contactos, etc. se pueden almacenar en otro tipo de objetos llamado Vectores

Un vector es un objeto particular que se diferencia de una variable simple ya que tiene cero, uno o más elementos. Como una variable, tiene un nombre.

Podemos obtener un vector digitando:

1:20

Nos mostrará: 1 2 3 4 5 6 7 8 9 10 ... 19 20

Si deseamos en una variable, podemos digitar:

z = 1:20

Al pedirle lo valores a z veremos que su contenido es la serie anterior.

Este es un vector. Pero es un vecor cuyos elementos han sido generados automáticamente.

Una forma simple de definir y dar valores a un vector es usando la siguiente sintaxis:

nomVector = c(v1, v2, ...)

donde v1, v2, ... pueden ser valores numéricos o cadena de caracteres encerrados entre comillas ("...").

Ejemplos:

(Recuerde que, en cada caso, digite el comando en el prompt (">") y debe presionar [Intro] para ingresar el dato)

(Recuerde también que, toda vez que desee ver el contenido de una variable o vector, debe digitar su nombre y presionar [Intro])

(Tome nota de que, si desea recuperar un comando ingresado previamente, presione flecha arriba hasta encontrar el comando deseado)

notas = c(1, 2, 4, 10, 20, 16, 5, 12, 11, 17, 14, 16)

y = c(120, 200, 180, 300, 220)

meses = c("Ene", "Feb", "Mar", "Abr", "May","Jun","Jul", "Ago", "Set")

m = "Ene Fen Mar Abr May Jun Jul Ago Set Oct Nov Dic"

Mientras  el objeto meses es un vecor cuyos elementos son cadena de caracteres, el objeto m es una cadena de caracteres y no es un vector.

Podemos definir el vector ndias, que contenga el número de días de cada mes

ndias = c(31, 28, 31, 31, 31, 30, 31, 31, 30)

¿Cómo se modifica el valor de un elemento de un vector?

Vamos a modificar el  número de días de Abril (elemento 4 de ndias).

ndias[4] = 30

¿Cómo se añade elementos a un vector?

meses = c(meses, "Oct", "Nov", "Dic")

ndias = c(ndias, 31, 30, 31)

¿Cómo se elimina el i-ésimo elemento de un vector?

Dada la variable notas (ingresada líneas arriba), deseamos eliminar la sétima nota que aparece como 5:

notas = notas[-7]

Si deseamos eliminar los tres primeros elementos de notas:

notas = notas[-1:-3]

Nota:

Si se quisiera definir un vector con elementos de 1 a 100 para ser usado como índices, podemos usar:

tindex = c(1:100)

Y ¿cómo sabemos si tiene 100 elementos? ¿Cómo saber si Meses y ndías tienen la misma cantidad de elementos?

Respuesta: Usamos la función length(...).

length(ndias)

length(meses)

length(tindex)

Podemos guardar en n la longitud de meses:

n = length(meses)

Otras formas de generar un vector:
a=c(1,2,3,4,5,11:20)
a
x=1:20
x


Otras formas de definir vectores con valores autogenerados:
Uso del comando seq(...)

Su sintaxis básica
seq(de = inic a = fin , by = incr)

Descripción:

Genera un vector de elementos cuyos valores empiezan en inic hasta to , incrementando de incr en incr.
Si no se usa "by 0 incr", los incrementos son unitarios.


Asigne los valores que Ud. crea conveniente.

Ejemplo 1

Las siguientes tres órdenes generan la misma serie o vector.
x=seq(1,10,by=1)
x=seq(1:10)
x=seq(1,10)

Ejemplo 2

x=seq(-6.28, 6.28, by = 0.02)
y = sin(x)
¿Cuántos elementos tendrá x ? ¿Y cuántos Y?
Para ello usaremos la función length(...) que nos devuelve el número de elementos que tiene un vector.
length(x)
El vector y tendrá la misma cantidad de elementos, lo puede comprobar.

Sorpresas del R

plot(x,y)

Tenemos dos ventanas: La ventana de la consola y la ventana del gráfico. Para pasar de una a otra use [CTRL]+F6. O también haciendo clic en dicha ventana.
Ahora digite:
plot(y)

Ambos comnados generan la gráfica de la función seno.
¿Puede decirme en qué se diferencian los dos gráficos?
plot(x,y) usa a x en el Eje X.
Cierre la ventana de gráficos.

Sigamos con lo nuestro. Dejemos a un lado el distractor. Ya tendremos tiempo para ello.

En consecuencia, tanto el comando "c" como "seq" nos permiten obtener vectores con valores que sieguen alguna secuencia.

Si se desea un vector personalizado, debemos ingresarlo manualmente.

¿Podemos generar secuencia de valores aleatorios?

Claro que sí.

Para eso disponemos de las funciones:

Uso del comando sample(...) y runif(...)
Sintaxis
sample(x, n, rep = FALSE | TRUE)
Descripción:

Genera una muestra de n elementos extraídos del vector x. Los elementos pueden repetirse (rep=TRUE) o no (rep=FALSE).

Ejemplo

Primero generamos el vector x:
x=1:50 o también x = c(1:50)
Ahora generemos una muestra de tamaño 30 usando la función sample para obtener la muestra en el mismo x o en otro.
r = sample(x, 30, rep=TRUE)

También pudimos haber usado:
r = sample(1:50, 30, rep=T)
 

Otro ejemplo

Generemos dos muestras:
Supongamos que deseamos tener una muestra de los ingresos de 30 trabajadores de una empresa de 300 trabajadores.
Para ello, supongamos que en x tenemos el número de hijos (0, 1, 2, 3, 4) de cada uno de los 300 empleados.
En y queremos tener el ingreso mensual de los 300 empleados.
Generemos x:
x = sample(0:4, 300, rep=T)
Generemos los ingresos.
y = sample(1200:4500, 300, rep=T)
Para saber si hemos generado 300 elementos, podemos usar la función length(...).
length(x)
length(y)

Ahora extraeremos la muestra de cada vector
nHijos = sample(x,30,rep=T)
xIngre = sample(y, 30, rep=T)

Pedimos que nos emita la muestras:
nHijos
xIngre
 

Veamos ahora la función runif(...).

Sintaxis
runif(n, min=0,max=1)
Descripción:

Genera n valores aleaorios entre min y max. Estos valores provienen de una función de distribución uniforme(lo veremos más tarde).

Ejemplo

Generar 10 números aleatorios:
x = runif(10)
Generar 30 números aleatorios entre 20 y 40.
y = runif(30,20, 40)

generemos 1000 números aleatorios entre 0 y 1 y veamos la frecuencia de repetición de cada valor.

r = runif(1000,0,1)
Digite la siguiente función que nos permitirá saber la frecuencia de los valores generados.
hist(r)

Observe que el número de veces que se repite los valores tiende a ser la misma (varía en un rango de 80 a 120).

No se olvide de hacer clic en la ventana a donde desea pasar.
Cierre la ventana de gráficos.

En la próxima sesión continuaremos con algunas aplicaciones interesantes usando vectores.
 

Siguiente