HOWTO · R
Trova l'indice di un elemento in un vettore R
Questo tutorial mostra come trovare l'indice di un elemento in un vettore R.
In questa pagina
Usa which() quando ti servono tutte le posizioni in cui una condizione è vera. Usa match() quando ti serve la prima posizione di ciascun valore cercato: per un valore senza corrispondenza restituisce NA. Le posizioni nei vettori R iniziano da 1. L’esempio seguente usa lo stesso vettore per confrontare i due risultati.
Trovare tutte le posizioni corrispondenti con which()
which() accetta un vettore logico e restituisce le posizioni dei suoi elementi TRUE. Il confronto di un vettore con un singolo valore può produrre più corrispondenze se quel valore compare più volte. Per cercare uno qualsiasi di più valori, usa %in% per creare un vettore logico che indica le corrispondenze, quindi passalo a which().
Esegui questo esempio per trovare tutte le occorrenze di 20 e poi le posizioni che contengono 10 oppure 30:
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
x <- c(10, 20, 10, 30, 20)
which(x == 20)
which(x %in% c(10, 30))
[1] 2 5
[1] 1 3 4
Il primo risultato include entrambe le posizioni in cui compare 20; il secondo elenca le posizioni i cui valori sono 10 oppure 30. Le posizioni partono da 1, come in tutti gli indici dei vettori R.
%in% è un operatore che restituisce un risultato logico per ogni elemento del vettore alla sua sinistra; non è un argomento di which(). Puoi anche cercare in base a una condizione, ad esempio x > 15: crea o passa quell’espressione logica a which() per ottenere le posizioni che la soddisfano. Poiché which() riporta soltanto le posizioni corrispondenti a TRUE, i valori logici mancanti non compaiono nel risultato. Il codice e l’output dell’esempio restano in inglese.
Trovare la prima posizione corrispondente per ciascun valore con match()
Usa match(needles, haystack) per trovare, in haystack, la prima posizione di ciascun valore in needles. L’ordine degli argomenti è importante: inserisci prima i valori da cercare e poi il vettore in cui cercarli. I valori ripetuti nel vettore esaminato non producono posizioni ripetute: ogni valore cercato restituisce al massimo un risultato. Per impostazione predefinita, se un valore cercato è assente, match() restituisce NA.
Usando il vettore x della sezione precedente, questa espressione trova la prima posizione di 20 e 30 e segnala che 40 non è presente:
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
x <- c(10, 20, 10, 30, 20)
match(c(20, 30, 40), x)
[1] 2 4 NA
I risultati corrispondono, nell’ordine, a 20, 30 e 40: 20 compare per la prima volta in posizione 2, 30 in posizione 4, mentre 40 è assente e il risultato è quindi NA.
Scegli la funzione in base al risultato che ti serve: which(x == value) può restituire tutte le posizioni corrispondenti, mentre match(value, x) restituisce solo la prima. Per cercare più valori, which(x %in% values) restituisce le posizioni nel vettore esaminato, mentre match(values, x) restituisce la prima posizione corrispondente per ciascun valore cercato, mantenendo l’ordine di values. Nessuna delle due funzioni modifica il vettore. Se usi le posizioni per selezionare elementi da un altro vettore, ricorda che per una corrispondenza assente match() restituisce NA; controlla !is.na(position) prima di usarle, se vuoi ignorare i valori senza corrispondenza. Le posizioni restituite si riferiscono al vettore esaminato: tieni presente il suo ordine quando le applichi a dati correlati. Il codice e l’output dell’esempio restano in inglese.