Come ottenere l'indice di una lettera da un elenco A-Z?
Domanda
Voglio ottenere l'indice di una particolare lettera, per esempio
> match(LETTERS,"G")
[1] NA NA NA NA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Mi dà che la lettera esiste, ma lo voglio tornare 6 in questo caso per l'elemento 6 ° della lista.
Soluzione
O which
:
which(LETTERS=="G")
La funzione which
è progettato specificamente per questo scopo:
Dare gli indici di 'veri' di una logica oggetto, consentendo indici degli array.
La funzione which
può restituire l'indice di valori logici TRUE
in una matrice impostando l'argomento arr.ind TRUE (questo è molto utile).
> which(matrix(LETTERS, nrow=5)=="G")
[1] 7
> which(matrix(LETTERS, nrow=5)=="G", arr.ind=TRUE)
row col
[1,] 2 2
Si consiglia inoltre di leggere questo recente post di Seth Falcon dove si parla di ottimizzazione in C.
Altri suggerimenti
Proprio per l'avviso: Penso che si voleva
match("G", LETTERS)
# [1] 7
I vantaggi di questa soluzione oltre grep
o which
è che si potrebbe utilizzare su vettore di lettere:
match(c("S","T","A","C","K","O","V","E","R","F","L","O","W"), LETTERS)
# gives:
# [1] 19 20 1 3 11 15 22 5 18 6 12 15 23
Prova grep
:
R> grep("G", LETTERS)
[1] 7