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.
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
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)
Escribe una línea para obtener las posiciones donde aparece 15.
Escribe una línea para obtener las posiciones de los valores mayores que 18.
Escribe una línea para obtener las posiciones de los valores que sean 15 o 20.
Escribe una línea para obtener las posiciones de los valores mayores que 10 y menores que 25.
Soluciones
Código
# 1which(x ==15)
[1] 2 4 7
Código
# 2which(x >18)
[1] 3 6 8 9
Código
# 3which(x %in%c(15, 20))
[1] 2 3 4 6 7
Código
# 4which(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.
Calcula cuántos elementos tiene el vector y luego calcula cuántos valores distintos hay.
Calcula la suma del vector completo y la suma de los valores únicos.
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
Obtén los valores sin repetir y luego ordénalos de menor a mayor usando.
Soluciones
Código
# 1length(x)
[1] 20
Código
length(unique(x))
[1] 14
Código
# 2sum(x)
[1] 172
Código
sum(unique(x))
[1] 132
Código
# 3mean(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
# 4sort(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.
resp <-c("sí", "no", "no sé", "sí", "sí", "no", "sí", "no","no sé", "sí", "sí", "no sé", "no", "sí", "sí", "no sé", "no sé")
Cuenta cuántas veces aparece cada respuesta.
Convierte esa tabla en proporciones e interpreta cuál respuesta fue más frecuente.
Soluciones
Código
# 1table(resp)
resp
no no sé sí
4 5 8
Código
# 2prop.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.
Compara x == NA con is.na(x) y explica cuál es la forma correcta de detectar faltantes.
Soluciones
Código
# 1which(is.na(asist))
[1] 3 6
Código
# 2# x == NAis.na(x) # forma correcta
[1] FALSE FALSE TRUE FALSE FALSE
Ejecutar el código
---title: "Tutorial de vectores en R"subtitle: "Conceptos básicos, ejercicios y soluciones"author: "Emilio Ortiz-Avila"date: "2026-03-20"lang: esdescription: "Material introductorio para aprender a trabajar con vectores en R."output-file: index.htmlformat: html: toc: true toc-location: left toc-title: "Contenido" toc-depth: 2 toc-expand: 2 number-sections: true number-depth: 2 theme: light: flatly dark: slate respect-user-color-scheme: true title-block-banner: true smooth-scroll: true anchor-sections: true code-copy: true code-fold: show code-summary: "Mostrar código" code-tools: true code-overflow: wrap link-external-icon: true link-external-newwindow: true max-width: 1000px linestretch: 1.6 css: styles.csseditor: visual---## IntroducciónUn 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.```{r}x <-c(2, 8, 9.5, 16)z <-c("rojo", "verde", "azul", "pistache")w <-c(TRUE, FALSE, TRUE)xzwclass(x)class(z)class(w)length(x)```::: callout-note## Ejercicios1. Crea un vector que contenga las longitudes de los objetos x, z y w::: {.callout-tip collapse="true" icon="false"}## Soluciones```{r}c(length(x),length(z),length(w))```:::2. ¿Cuál es el resultado de correr las siguientes líneas de código?`c(x, z, w)``length( c(x, z, w) )`::: {.callout-tip collapse="true" icon="false"}## Soluciones1. `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.::::::## Creación de vectoresLos 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.```{r}a <-c(10, 20, 30, 40)b <-1:10c <-seq(from =0, to =20, by =5)d <-rep(3, times =5)e <-rep(c("A", "B"), times =3)abcde```::: callout-note## Ejercicios1. 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)`.::: {.callout-tip collapse="true" icon="false"}## Soluciones```{r}# 1pares1 <-seq(2, 20, by =2)pares2 <-c(2, 4, 6, 8, 10, 12, 14, 16, 18, 20)pares1pares2# 2grupos <-rep(c("control", "tratado"), times =6)gruposlength(grupos)# 3dias <-c(0, 48, 12)dias_rep <-rep(dias, each =2)diasdias_rep# 4rep(1:3, times =2)rep(1:3, each =2)```::::::## Coerción de tiposEn R, un vector debe contener elementos del mismo tipo.```{r}v1 <-c(1, 2, 3)v2 <-c(1, 2, "3")v3 <-c(TRUE, FALSE, 5)v4 <-c(TRUE, "hola", 8)v1v2v3v4class(v1)class(v2)class(v3)class(v4)```**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`.## Indexación de vectoresLa indexación permite acceder a elementos por posición. Se usan `[]`, `c()` para varias posiciones y `length()` para ubicar el último elemento.```{r}x <- LETTERS # letters para letras mayúsculasx[1]x[3]x[c(2, 4, 5)]x[-2]x[length(x)]y <-c(12, 25, 18, 30, 22, 84)y[1]y[3]y[c(2, 4, 5)]y[-2]y[length(y)]```::: callout-note## Ejercicios1. 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.::: {.callout-tip collapse="true" icon="false"}## Soluciones```{r}# 1x <-c(5, 8, 12, 3, 20, 7, 15)x[2]x[length(x) -1]x[c(1, 3, 6)]# 2x[-4]#Los índices positivos seleccionan posiciones; los negativos excluyen posiciones.```::::::## Modificación de vectoresLos 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()````{r}x <-c(20, 5, 15, 10)x[2] <-99xx[c(1, 4)] <-c(100, 200)xx <-c(x, 300)xsort(x, decreasing =TRUE)sort(x, decreasing =FALSE)```::: callout-note## Ejercicios1. Cambia las reprobatorias por `NA` del siguiente vector:```{r} 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:```{r} temp <-c(18, -4, 27, 9, 0, 33, 14, -1, 22, 5, 30, 11, -7, 25, 3)```::: {.callout-tip collapse="true" icon="false"}## Soluciones```{r}# 1cal[c(1, 4)] <-NA# 2temp <-sort(temp, decreasing =FALSE)temp[1] <-0temp[length(temp)] <-100```::::::## Operadores relacionalesLos operadores relacionales comparan cada elemento de un vector con un valor. El resultado es un vector lógico.```{r}x <-c(4, 7, 2, 9, 7)x ==7# ¿Qué elementos del vector x son iguales a 7?x !=7# ¿Qué elementos del vector x NO son iguales a 7?x >5# ¿Qué elementos del vector x son mayores a 7?x <5# ¿Qué elementos del vector x son menores a 7?x >=7# ¿Qué elementos del vector x son mayor igual a 7?x <=4# ¿Qué elementos del vector x son menor igual a 7?```## Filtrado con vectores lógicosLos 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.```{r}x <-c(4, 7, 2, 9, 7, 12)# ¿Qué elementos del vector x son mayores a 5?x >5x[x >5] # Solo toma en cuenta los elementos que digan TRUE y descartan los que digan FALSEx[x ==7]x[x >5& x <10] # ANDx[x <4| x >8] # OR```::: callout-note## EjerciciosA partir del siguiente vector:```{r}n <-c(12, -7, 25, -3, 0, 18, -14, 9, -21, 6, -1, 30, -11, 4, -8, 17, -26, 13, -5, 22)```Calcula1. La longitud de `n`2. Cuántos elementos son mayores a 03. Cuántos elementos son menores o iguales a 04. Cuántos elementos están entre -10 y 105. Cuántos elementos son mayores a 15 o menores a -15::: {.callout-tip collapse="true" icon="false"}## Soluciones```{r}# 1length(n)# 2length( n[ n >0 ] )# 3length( n[ n <=0 ] )# 4length( n[ n >-10& n <10 ] )# 5length( n[ n >15| n <-15 ] )```::::::## Operadores lógicos y pertenenciaLos operadores lógicos permiten combinar condiciones, mientras que `%in%` sirve para verificar si ciertos elementos pertenecen a un conjunto de valores.```{r}x <-c(2, 4, 6, 8, 10, 12)x >4& x <10x <4| x >10!(x >6)x %in%c(4, 10, 15)x[x %in%c(4, 10, 15)]```::: callout-note## EjerciciosObserva el siguiente vector```{r}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 inicial3. Extrae del vector solo los elementos que sean "Pera", "pera", "Uva" o "uva".::: {.callout-tip collapse="true" icon="false"}## Soluciones1. La palabra "Manzana" está escrita dos veces, mientras que "manzana" está escrita 5 veces```{r}# 2length( frutas[ frutas %in%c("Manzana", "manzana") ] )# 3frutas[frutas %in%c("Pera", "pera", "Uva", "uva")]# 4length(frutas[!(frutas %in%c("Manzana", "manzana"))])```::::::## 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.```{r}x <-c(15, 22, 18, 22, 10)which(x ==22)which(x >15)which.max(x)which.min(x)```::: callout-note## EjerciciosObserva el siguiente vector:```{r}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.::: {.callout-tip collapse="true" icon="false"}## Soluciones```{r}# 1which(x ==15)# 2which(x >18)# 3which(x %in%c(15, 20))# 4which(x >10& x <25)```::::::## Nombres en vectoresLos 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.```{r}calificaciones <-c(90, 85, 78, 92, 88)names(calificaciones) <-c("Ana", "Luis", "Marta", "Diego", "Sofia")calificacionesnames(calificaciones)calificaciones["Luis"]names(calificaciones)[3] <-"Carlos"calificaciones```::: callout-note## EjerciciosObserva el siguiente vector:```{r}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.::: {.callout-tip collapse="true" icon="false"}## Soluciones```{r}# 1edades["Diego"]# 2names(edades)# 3which ( names(edades) =="Raul")names(edades)[5] <-"Rodolfo"edades# 4edades["Paula"] <-25edades```::::::## Funciones útiles sobre vectoresExisten funciones que permiten resumir el contenido de un vector, obtener estadísticas simples, ordenar valores o identificar elementos distintos.```{r}x <-c(8, 3, 10, 3, 5, 8, 12)length(x) # Calcula cuántos elementos hay en un vectorsum(x) # Suma todos los valores numéricosmean(x) # Calcula el promediomin(x) # Devuelve el valor mínimomax(x) # Devuelve el valor máximosort(x) # Ordena los valores de un vector de mayor a menor o viceversaunique(x) # Devuelve los elementos de un vector sin repetirse```::: callout-note## EjerciciosObserva el siguiente vector:```{r}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 promedio4. Obtén los valores sin repetir y luego ordénalos de menor a mayor usando.::: {.callout-tip collapse="true" icon="false"}## Soluciones```{r}# 1length(x)length(unique(x))# 2sum(x)sum(unique(x))# 3mean(x)min(x)max(x)mean(x) -min(x)max(x) -mean(x)# 4sort(unique(x), decreasing =FALSE)```::::::## 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.```{r}frutas <-c("manzana", "pera", "manzana", "uva", "pera", "manzana")table(frutas)prop.table(table(frutas))```::: callout-note## EjerciciosObserva el siguiente vector:```{r}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.::: {.callout-tip collapse="true" icon="false"}## Soluciones```{r}# 1table(resp)# 2prop.table(table(resp))```::::::## 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.```{r}x <-c(10, 20, NA, 40, 50)xis.na(x)mean(x)mean(x, na.rm =TRUE)sum(x)sum(x, na.rm =TRUE)```::: callout-note## EjerciciosObserva el siguiente vector:```{r}asist <-c("Mayela", "Cindy", NA, "Aldo", "Enrique", NA, "Selena")```1. Detecta las posiciones de los datos faltantes2. Compara `x == NA` con `is.na(x)` y explica cuál es la forma correcta de detectar faltantes.::: {.callout-tip collapse="true" icon="false"}## Soluciones```{r}# 1which(is.na(asist))# 2# x == NAis.na(x) # forma correcta```::::::