Cómo obtener el índice de una carta de una lista A-Z?
Pregunta
Quiero conseguir el índice de una letra en particular, por ejemplo,
> 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
Me da que la carta existe, pero quiero que vuelva 6 en este caso para el sexto elemento de la lista.
Solución
O which
:
which(LETTERS=="G")
La función which
está diseñado específicamente para este propósito:
Dar a los índices 'verdadero' de una lógica objeto, lo que permite índices de matriz.
La función which
también puede devolver el índice para los valores TRUE
lógicas en una matriz estableciendo el argumento arr.ind a TRUE (esto es muy útil).
> which(matrix(LETTERS, nrow=5)=="G")
[1] 7
> which(matrix(LETTERS, nrow=5)=="G", arr.ind=TRUE)
row col
[1,] 2 2
También es posible que desee leer este reciente post de Seth Falcon donde habla acerca de la optimización en C.
Otros consejos
Sólo por el aviso: Creo que quería
match("G", LETTERS)
# [1] 7
Los beneficios de esta solución sobre grep
o which
es que se puede utilizar en el vector de letras:
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
Trate grep
:
R> grep("G", LETTERS)
[1] 7