HOWTO · R

Encontrar el índice de un elemento en un vector R

Este tutorial muestra cómo encontrar el índice de un elemento en un vector de R

En esta página

Usa which() cuando necesites todas las posiciones en las que una condición sea verdadera. Usa match() cuando necesites la primera posición de cada valor buscado; devuelve NA si no encuentra un valor. Las posiciones de los vectores en R empiezan en 1. El ejemplo siguiente compara ambos resultados con un mismo vector.

Encontrar todas las posiciones coincidentes con which()

which() acepta un vector lógico y devuelve las posiciones de sus elementos TRUE. Al comparar un vector con un valor, puede haber varias coincidencias si ese valor aparece más de una vez. Para buscar varios valores, usa %in% para crear un vector lógico de pertenencia y pásalo a which().

Ejecuta este ejemplo para encontrar todas las apariciones de 20 y, después, las posiciones que contienen 10 o 30. El código y las etiquetas visibles del ejemplo se conservan en inglés:

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

x <- c(10, 20, 10, 30, 20)
which(x == 20)
which(x %in% c(10, 30))
[1] 2 5
[1] 1 3 4

El primer resultado incluye las dos posiciones en las que aparece 20; el segundo enumera las posiciones cuyos valores son 10 o 30. Estas posiciones empiezan en 1, como ocurre con todos los índices de vectores en R.

%in% es un operador que devuelve un resultado lógico por cada elemento del vector situado a su izquierda; no es un argumento de which(). También puedes buscar mediante una condición como x > 15: crea esa expresión lógica o pásala directamente a which() para obtener las posiciones que la cumplen. Como which() solo informa las posiciones correspondientes a TRUE, los valores lógicos ausentes no aparecen en el resultado.

Encontrar la primera posición coincidente de cada valor con match()

Usa match(needles, haystack) para encontrar, para cada valor de needles, su primera posición en haystack. El orden de los argumentos importa: primero indica los valores que buscas y, después, el vector en el que buscas. Los valores repetidos en el vector de búsqueda no generan posiciones repetidas; cada valor buscado obtiene como máximo un resultado. De forma predeterminada, si un valor no está presente, match() devuelve NA.

Con el vector x de la sección anterior, esta expresión encuentra la primera posición de 20 y 30, e indica que no hay coincidencia para 40. El código y las etiquetas visibles del ejemplo se conservan en inglés:

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

x <- c(10, 20, 10, 30, 20)
match(c(20, 30, 40), x)
[1]  2  4 NA

Los resultados corresponden, en ese orden, a 20, 30 y 40: 20 aparece primero en la posición 2, 30 en la posición 4 y 40 no está presente, por lo que su resultado es NA.

Elige la función según el resultado que necesites: which(x == value) puede devolver todas las posiciones coincidentes, mientras que match(value, x) devuelve solo la primera. Para varios valores buscados, which(x %in% values) devuelve las posiciones en el vector de búsqueda; en cambio, match(values, x) devuelve la primera posición coincidente de cada valor y conserva el orden de values. Ninguna de las dos funciones modifica el vector. Si usas las posiciones para seleccionar elementos de otro vector, recuerda que un resultado NA de match() indica que no hubo coincidencia; comprueba !is.na(position) antes de usarlo si quieres omitir los valores sin coincidencia. Las posiciones devueltas corresponden al vector de búsqueda, así que ten en cuenta su orden al aplicarlas a datos relacionados.