Conceptos básicos, ejercicios y soluciones

Material introductorio para aprender a trabajar con vectores en R.
Autor/a

Emilio Ortiz-Avila

Fecha de publicación

20 de marzo de 2026

1 Introducción

Un vector es una estructura unidimensional que almacena varios elementos del mismo tipo. En R, los vectores son una de las bases del trabajo con datos y muchas funciones operan directamente sobre ellos.

Para crear un vector en R se utiliza la función c(), que significa combinar o concatenar.

Código
x <- c(2, 8, 9.5, 16)
z <- c("rojo", "verde", "azul", "pistache")
w <- c(TRUE, FALSE, TRUE)

x
[1]  2.0  8.0  9.5 16.0
Código
z
[1] "rojo"     "verde"    "azul"     "pistache"
Código
w
[1]  TRUE FALSE  TRUE
Código
class(x)
[1] "numeric"
Código
class(z)
[1] "character"
Código
class(w)
[1] "logical"
Código
length(x)
[1] 4
Ejercicios
  1. Crea un vector que contenga las longitudes de los objetos x, z y w
Código
c(
 length(x),
 length(z),
 length(w)
)
[1] 4 4 3
  1. ¿Cuál es el resultado de correr las siguientes líneas de código?

c(x, z, w)

length( c(x, z, w) )

  1. c(x, z, w) combina los elementos de x, z y w en un solo vector.
  2. length(c(x, z, w)) cuenta cuántos elementos tiene ese vector combinado.

2 Creación de vectores

Los vectores pueden crearse manualmente, mediante secuencias o repitiendo valores.

  • : genera una secuencia de números consecutivos.
  • seq() crea secuencias indicando inicio, fin e incremento.
  • rep() repite un valor o un patrón.
Código
a <- c(10, 20, 30, 40)
b <- 1:10
c <- seq(from = 0, to = 20, by = 5)
d <- rep(3, times = 5)
e <- rep(c("A", "B"), times = 3)

a
[1] 10 20 30 40
Código
b
 [1]  1  2  3  4  5  6  7  8  9 10
Código
c
[1]  0  5 10 15 20
Código
d
[1] 3 3 3 3 3
Código
e
[1] "A" "B" "A" "B" "A" "B"
Ejercicios
  1. Genera un vector con los números pares del 2 al 20 de dos maneras distintas.

  2. Crea un vector con el patrón "control", "tratado" repetido seis veces y determina cuántas observaciones contiene.

  3. Construye un vector con los días de muestreo 0, 12, 24, 36 y 48. Después crea otro donde cada día aparezca dos veces.

  4. Sin ejecutar primero, predice la diferencia entre rep(1:3, times = 2) y rep(1:3, each = 2).

Código
# 1
pares1 <- seq(2, 20, by = 2)
pares2 <- c(2, 4, 6, 8, 10, 12, 14, 16, 18, 20)

pares1
 [1]  2  4  6  8 10 12 14 16 18 20
Código
pares2
 [1]  2  4  6  8 10 12 14 16 18 20
Código
# 2
grupos <- rep(c("control", "tratado"), times = 6)
grupos
 [1] "control" "tratado" "control" "tratado" "control" "tratado" "control"
 [8] "tratado" "control" "tratado" "control" "tratado"
Código
length(grupos)
[1] 12
Código
# 3
dias <- c(0, 48, 12)
dias_rep <- rep(dias, each = 2)


dias
[1]  0 48 12
Código
dias_rep
[1]  0  0 48 48 12 12
Código
# 4
rep(1:3, times = 2)
[1] 1 2 3 1 2 3
Código
rep(1:3, each = 2)
[1] 1 1 2 2 3 3

3 Coerción de tipos

En R, un vector debe contener elementos del mismo tipo.

Código
v1 <- c(1, 2, 3)
v2 <- c(1, 2, "3")
v3 <- c(TRUE, FALSE, 5)
v4 <- c(TRUE, "hola", 8)

v1
[1] 1 2 3
Código
v2
[1] "1" "2" "3"
Código
v3
[1] 1 0 5
Código
v4
[1] "TRUE" "hola" "8"   
Código
class(v1)
[1] "numeric"
Código
class(v2)
[1] "character"
Código
class(v3)
[1] "numeric"
Código
class(v4)
[1] "character"

De forma simplificada, la coerción sigue este orden:

  1. character

  2. numeric

  3. logical

Esto significa que:

  1. Si hay texto, todo el vector se convierte a character.

  2. Si no hay texto, pero hay números, los valores lógicos se convierten a numeric.

  3. Si todos los elementos son lógicos, el vector permanece como logical.

4 Indexación de vectores

La indexación permite acceder a elementos por posición. Se usan [], c() para varias posiciones y length() para ubicar el último elemento.

Código
x <- LETTERS # letters para letras mayúsculas
x[1]
[1] "A"
Código
x[3]
[1] "C"
Código
x[c(2, 4, 5)]
[1] "B" "D" "E"
Código
x[-2]
 [1] "A" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T"
[20] "U" "V" "W" "X" "Y" "Z"
Código
x[length(x)]
[1] "Z"
Código
y <- c(12, 25, 18, 30, 22, 84)

y[1]
[1] 12
Código
y[3]
[1] 18
Código
y[c(2, 4, 5)]
[1] 25 30 22
Código
y[-2]
[1] 12 18 30 22 84
Código
y[length(y)]
[1] 84
Ejercicios
  1. Crea un vector con siete números distintos y extrae el segundo, el penúltimo y los elementos en las posiciones 1, 3 y 6.

  2. A partir del mismo vector, obtén todos los elementos excepto el cuarto y explica la diferencia entre índices positivos y negativos.

Código
# 1
x <- c(5, 8, 12, 3, 20, 7, 15)

x[2]
[1] 8
Código
x[length(x) - 1]
[1] 7
Código
x[c(1, 3, 6)]
[1]  5 12  7
Código
# 2
x[-4]
[1]  5  8 12 20  7 15
Código
#Los índices positivos seleccionan posiciones; los negativos excluyen posiciones.

5 Modificación de vectores

Los vectores pueden modificarse después de crearse. Se usa [] <- para reemplazar elementos y c() para agregar nuevos.

Los elementos de un vector numérico pueden ordenarse de mayor a menor o viceversa con la función sort()

Código
x <- c(20, 5, 15, 10)

x[2] <- 99
x
[1] 20 99 15 10
Código
x[c(1, 4)] <- c(100, 200)
x
[1] 100  99  15 200
Código
x <- c(x, 300)
x
[1] 100  99  15 200 300
Código
sort(x, decreasing = TRUE)
[1] 300 200 100  99  15
Código
sort(x, decreasing = FALSE)
[1]  15  99 100 200 300
Ejercicios
  1. Cambia las reprobatorias por NA del siguiente vector:

    Código
    cal <- c(5, 10, 8, 4, 9, 10, 6)
  2. Sustituye el valor mínimo por 0 y el valor máximo por 100 a partir del siguiente vector:

    Código
    temp <- c(18, -4, 27, 9, 0, 33, 14, -1, 22, 5, 30, 11, -7, 25, 3)
Código
# 1
cal[c(1, 4)] <- NA

# 2
temp <- sort(temp, decreasing = FALSE)
temp[1] <- 0

temp[length(temp)] <- 100

6 Operadores relacionales

Los operadores relacionales comparan cada elemento de un vector con un valor. El resultado es un vector lógico.

Código
x <- c(4, 7, 2, 9, 7)

x == 7 # ¿Qué elementos del vector x son iguales a 7?
[1] FALSE  TRUE FALSE FALSE  TRUE
Código
x != 7 # ¿Qué elementos del vector x NO son iguales a 7?
[1]  TRUE FALSE  TRUE  TRUE FALSE
Código
x > 5 # ¿Qué elementos del vector x son mayores a 7?
[1] FALSE  TRUE FALSE  TRUE  TRUE
Código
x < 5 # ¿Qué elementos del vector x son menores a 7?
[1]  TRUE FALSE  TRUE FALSE FALSE
Código
x >= 7 # ¿Qué elementos del vector x son mayor igual a 7?
[1] FALSE  TRUE FALSE  TRUE  TRUE
Código
x <= 4 # ¿Qué elementos del vector x son menor igual a 7?
[1]  TRUE FALSE  TRUE FALSE FALSE

7 Filtrado con vectores lógicos

Los resultados lógicos pueden utilizarse para seleccionar solo los elementos que cumplan una condición. Esta forma de filtrado es una de las más importantes en R.

Código
x <- c(4, 7, 2, 9, 7, 12)

# ¿Qué elementos del vector x son mayores a 5?
x > 5
[1] FALSE  TRUE FALSE  TRUE  TRUE  TRUE
Código
x[x > 5] # Solo toma en cuenta los elementos que digan TRUE y descartan los que digan FALSE
[1]  7  9  7 12
Código
x[x == 7]
[1] 7 7
Código
x[x > 5 & x < 10] # AND
[1] 7 9 7
Código
x[x < 4 | x > 8] # OR
[1]  2  9 12
Ejercicios

A partir del siguiente vector:

Código
n <- c(12, -7, 25, -3, 0, 18, -14, 9, -21, 6, -1, 30, -11, 4, -8, 17, -26, 13, -5, 22)

Calcula

  1. La longitud de n

  2. Cuántos elementos son mayores a 0

  3. Cuántos elementos son menores o iguales a 0

  4. Cuántos elementos están entre -10 y 10

  5. Cuántos elementos son mayores a 15 o menores a -15

Código
# 1
length(n)
[1] 20
Código
# 2
length( n[ n > 0 ] )
[1] 10
Código
# 3
length( n[ n <= 0 ] )
[1] 10
Código
# 4
length( n[ n > -10 & n < 10 ] )
[1] 9
Código
# 5
length( n[ n > 15 | n < -15 ] )
[1] 7

8 Operadores lógicos y pertenencia

Los operadores lógicos permiten combinar condiciones, mientras que %in% sirve para verificar si ciertos elementos pertenecen a un conjunto de valores.

Código
x <- c(2, 4, 6, 8, 10, 12)

x > 4 & x < 10
[1] FALSE FALSE  TRUE  TRUE FALSE FALSE
Código
x < 4 | x > 10
[1]  TRUE FALSE FALSE FALSE FALSE  TRUE
Código
!(x > 6)
[1]  TRUE  TRUE  TRUE FALSE FALSE FALSE
Código
x %in% c(4, 10, 15)
[1] FALSE  TRUE FALSE FALSE  TRUE FALSE
Código
x[x %in% c(4, 10, 15)]
[1]  4 10
Ejercicios

Observa el siguiente vector

Código
frutas <- c(
  "pera", "Manzana", "Uva", "manzana", "Pera",
  "uva", "manzana", "Piña", "pera", "manzana",
  "Uva", "piña", "manzana", "pera", "uva",
  "Manzana", "Pera", "manzana", "Uva", "pera"
)
  1. Sin usar R, ¿Cuántas veces está escrita la palabra “Manzana”?

  2. Escribe un código para contar cuantas veces aparece una fruta sin importar mayúscula inicial

  3. Extrae del vector solo los elementos que sean “Pera”, “pera”, “Uva” o “uva”.

  1. La palabra “Manzana” está escrita dos veces, mientras que “manzana” está escrita 5 veces
Código
# 2
length( frutas[ frutas %in% c("Manzana", "manzana") ] )
[1] 7
Código
# 3
frutas[frutas %in% c("Pera", "pera", "Uva", "uva")]
 [1] "pera" "Uva"  "Pera" "uva"  "pera" "Uva"  "pera" "uva"  "Pera" "Uva" 
[11] "pera"
Código
# 4
length(frutas[!(frutas %in% c("Manzana", "manzana"))])
[1] 13

9 La función which()

La función which() devuelve las posiciones de los elementos que cumplen una condición. which.max() y which.min() devuelven la posición del máximo y del mínimo.

Código
x <- c(15, 22, 18, 22, 10)

which(x == 22)
[1] 2 4
Código
which(x > 15)
[1] 2 3 4
Código
which.max(x)
[1] 2
Código
which.min(x)
[1] 5
Ejercicios

Observa el siguiente vector:

Código
x <- c(10, 15, 20, 15, 8, 20, 15, 25, 30, 12)
  1. Escribe una línea para obtener las posiciones donde aparece 15.
  2. Escribe una línea para obtener las posiciones de los valores mayores que 18.
  3. Escribe una línea para obtener las posiciones de los valores que sean 15 o 20.
  4. Escribe una línea para obtener las posiciones de los valores mayores que 10 y menores que 25.
Código
# 1
which(x == 15)
[1] 2 4 7
Código
# 2
which(x > 18)
[1] 3 6 8 9
Código
# 3
which(x %in% c(15, 20))
[1] 2 3 4 6 7
Código
# 4
which(x > 10 & x < 25)
[1]  2  3  4  6  7 10

10 Nombres en vectores

Los elementos de un vector pueden recibir nombres para facilitar su identificación. Esto permite acceder a ellos no solo por posición, sino también por etiqueta.

Código
calificaciones <- c(90, 85, 78, 92, 88)
names(calificaciones) <- c("Ana", "Luis", "Marta", "Diego", "Sofia")

calificaciones
  Ana  Luis Marta Diego Sofia 
   90    85    78    92    88 
Código
names(calificaciones)
[1] "Ana"   "Luis"  "Marta" "Diego" "Sofia"
Código
calificaciones["Luis"]
Luis 
  85 
Código
names(calificaciones)[3] <- "Carlos"
calificaciones
   Ana   Luis Carlos  Diego  Sofia 
    90     85     78     92     88 
Ejercicios

Observa el siguiente vector:

Código
edades <- c(19, 22, 21, 20, 23, 18, 24, 26, 19, 22)
names(edades) <- c("Elena", "Marco", "Julia", "Pedro", "Raul", "Laura", "Diego", "Sonia", "Miguel", "Paula")
  1. Escribe una línea para mostrar la edad de “Diego”.
  2. Escribe una línea para obtener solo los nombres del vector.
  3. Cambia el nombre “Raul” por “Rodolfo”.
  4. Cambia la edad de “Paula” a 25.
Código
# 1
edades["Diego"]
Diego 
   24 
Código
# 2
names(edades)
 [1] "Elena"  "Marco"  "Julia"  "Pedro"  "Raul"   "Laura"  "Diego"  "Sonia" 
 [9] "Miguel" "Paula" 
Código
# 3
which ( names(edades) == "Raul")
[1] 5
Código
names(edades)[5] <- "Rodolfo"
edades
  Elena   Marco   Julia   Pedro Rodolfo   Laura   Diego   Sonia  Miguel   Paula 
     19      22      21      20      23      18      24      26      19      22 
Código
# 4
edades["Paula"] <- 25
edades
  Elena   Marco   Julia   Pedro Rodolfo   Laura   Diego   Sonia  Miguel   Paula 
     19      22      21      20      23      18      24      26      19      25 

11 Funciones útiles sobre vectores

Existen funciones que permiten resumir el contenido de un vector, obtener estadísticas simples, ordenar valores o identificar elementos distintos.

Código
x <- c(8, 3, 10, 3, 5, 8, 12)

length(x) # Calcula cuántos elementos hay en un vector
[1] 7
Código
sum(x) # Suma todos los valores numéricos
[1] 49
Código
mean(x) # Calcula el promedio
[1] 7
Código
min(x) # Devuelve el valor mínimo
[1] 3
Código
max(x) # Devuelve el valor máximo
[1] 12
Código
sort(x) # Ordena los valores de un vector de mayor a menor o viceversa
[1]  3  3  5  8  8 10 12
Código
unique(x) # Devuelve los elementos de un vector sin repetirse
[1]  8  3 10  5 12
Ejercicios

Observa el siguiente vector:

Código
x <- c(14, 7, 3, 14, 9, 2, 18, 7, 5, 11, 3, 20, 1, 9, 6, 15, 2, 8, 13, 5)
  1. Calcula cuántos elementos tiene el vector y luego calcula cuántos valores distintos hay.

  2. Calcula la suma del vector completo y la suma de los valores únicos.

  3. Calcula el promedio, el mínimo y el máximo del vector. Luego calcula la diferencia entre el promedio y el mínimo, y entre el máximo y el promedio

  4. Obtén los valores sin repetir y luego ordénalos de menor a mayor usando.

Código
# 1
length(x)
[1] 20
Código
length(unique(x))
[1] 14
Código
# 2
sum(x)
[1] 172
Código
sum(unique(x))
[1] 132
Código
# 3
mean(x)
[1] 8.6
Código
min(x)
[1] 1
Código
max(x)
[1] 20
Código
mean(x) - min(x)
[1] 7.6
Código
max(x) - mean(x)
[1] 11.4
Código
# 4
sort(unique(x), decreasing = FALSE)
 [1]  1  2  3  5  6  7  8  9 11 13 14 15 18 20

12 Tablas de frecuencia con table()

table() cuenta cuántas veces aparece cada valor. prop.table() transforma esas frecuencias en proporciones. Es especialmente útil cuando se trabaja con categorías o respuestas repetidas.

Código
frutas <- c("manzana", "pera", "manzana", "uva", "pera", "manzana")

table(frutas)
frutas
manzana    pera     uva 
      3       2       1 
Código
prop.table(table(frutas))
frutas
  manzana      pera       uva 
0.5000000 0.3333333 0.1666667 
Ejercicios

Observa el siguiente vector:

Código
resp <- c("sí", "no", "no sé", "sí", "sí", "no", "sí", "no","no sé", "sí", "sí", "no sé", "no", "sí", "sí", "no sé", "no sé")
  1. Cuenta cuántas veces aparece cada respuesta.

  2. Convierte esa tabla en proporciones e interpreta cuál respuesta fue más frecuente.

Código
# 1
table(resp)
resp
   no no sé    sí 
    4     5     8 
Código
# 2
prop.table(table(resp))
resp
       no     no sé        sí 
0.2352941 0.2941176 0.4705882 

13 Valores faltantes (NA)

En R, los datos faltantes se representan con NA. Estos valores deben tratarse con cuidado porque afectan cálculos y comparaciones. is.na() los detecta y na.rm = TRUE permite ignorarlos en algunos cálculos.

Código
x <- c(10, 20, NA, 40, 50)

x
[1] 10 20 NA 40 50
Código
is.na(x)
[1] FALSE FALSE  TRUE FALSE FALSE
Código
mean(x)
[1] NA
Código
mean(x, na.rm = TRUE)
[1] 30
Código
sum(x)
[1] NA
Código
sum(x, na.rm = TRUE)
[1] 120
Ejercicios

Observa el siguiente vector:

Código
asist <- c("Mayela", "Cindy", NA, "Aldo", "Enrique", NA, "Selena")
  1. Detecta las posiciones de los datos faltantes

  2. Compara x == NA con is.na(x) y explica cuál es la forma correcta de detectar faltantes.

Código
# 1
which(is.na(asist))
[1] 3 6
Código
# 2
# x == NA
is.na(x) # forma correcta
[1] FALSE FALSE  TRUE FALSE FALSE