HOWTO · R
Encontrar Índice de um Elemento num Vector R
Este tutorial demonstra como encontrar o índice de um elemento de um Vector R
Nesta página
Use which() quando precisar de todas as posições em que uma condição é verdadeira. Use match() quando precisar da primeira posição de cada valor procurado; para um valor sem correspondência, a função devolve NA. As posições nos vetores de R começam em 1. O exemplo abaixo usa um único vetor para comparar os dois resultados.
Encontre todas as posições correspondentes com which()
which() recebe um vetor lógico e devolve as posições dos elementos TRUE. Comparar um vetor com um único valor pode produzir várias correspondências quando esse valor aparece mais de uma vez. Para procurar qualquer um de vários valores, use %in% para criar um vetor lógico de pertença e, em seguida, passe-o para which().
Execute este exemplo para encontrar todas as ocorrências de 20 e, depois, as posições que contêm 10 ou 30. O código e os rótulos visíveis nos exemplos permanecem em 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
O primeiro resultado inclui as duas posições em que 20 aparece; o segundo lista as posições cujos valores são 10 ou 30. Essas posições começam em 1, como toda indexação de vetores em R.
%in% é um operador que devolve um resultado lógico para cada elemento do vetor à esquerda; não é um argumento de which(). Também pode procurar usando uma condição, como x > 15: crie ou passe essa expressão lógica para which() para obter as posições que a satisfazem. Como which() informa apenas as posições correspondentes a TRUE, valores lógicos ausentes não aparecem no resultado.
Encontre a primeira posição correspondente de cada valor com match()
Use match(needles, haystack) para encontrar, em haystack, a primeira posição de cada valor em needles. A ordem dos argumentos importa: primeiro vêm os valores que está a procurar e, depois, o vetor pesquisado. Valores repetidos no vetor pesquisado não geram posições repetidas; cada valor procurado recebe, no máximo, um resultado. Por predefinição, match() devolve NA quando um valor procurado não está presente.
Usando o vetor x da secção anterior, esta expressão encontra a primeira posição de 20 e 30 e indica que 40 não tem correspondência. O código e os rótulos visíveis nos exemplos permanecem em inglês:
x <- c(10, 20, 10, 30, 20)
match(c(20, 30, 40), x)
[1] 2 4 NA
Os resultados correspondem, pela ordem, a 20, 30 e 40: 20 aparece primeiro na posição 2, 30 na posição 4 e 40 não está presente, pelo que o resultado é NA.
Escolha a função conforme o resultado de que precisa: which(x == value) pode devolver todas as posições correspondentes, enquanto match(value, x) devolve apenas a primeira. Para vários valores procurados, which(x %in% values) devolve as posições no vetor pesquisado, enquanto match(values, x) devolve uma posição da primeira correspondência para cada valor procurado, mantendo a ordem de values. Nenhuma das funções altera o vetor. Se usar as posições para selecionar elementos de outro vetor, lembre-se de que um resultado NA de match() indica que não houve correspondência; verifique com !is.na(position) antes de o usar quando quiser ignorar valores sem correspondência. As posições devolvidas referem-se ao vetor pesquisado; tenha em conta a ordem desse vetor ao aplicá-las a dados relacionados.