convertir letras a números

Tengo un montón de cartas, y no puedo imaginar cómo convertirlas a su equivalente numérico.

letters[1:4] 

Hay una función

 numbers['e'] 

que devuelve

 5 

o algo definido por el usuario (es decir, 1994)?

Quiero convertir las 26 letras a un valor específico.

No conozco una función “preconstruida”, pero una asignación de este tipo es muy fácil de configurar usando match . Para el ejemplo específico que das, haciendo coincidir una letra con su posición en el alfabeto, podemos usar el siguiente código:

 myLetters < - letters[1:26] match("a", myLetters) [1] 1 

Es casi tan fácil asociar otros valores a las letras. El siguiente es un ejemplo usando una selección aleatoria de enteros.

 # assign values for each letter, here a sample from 1 to 2000 set.seed(1234) myValues < - sample(1:2000, size=26) names(myValues) <- myLetters myValues[match("a", names(myValues))] a 228 

Tenga en cuenta también que este método se puede extender a colecciones ordenadas de letras (cadenas) también.

Cree un vector de búsqueda y use subconjuntos simples:

 x < - letters[1:4] lookup <- setNames(seq_along(letters), letters) lookup[x] #abcd #1 2 3 4 

Use unname si desea eliminar los nombres.

Puedes probar esta función:

 letter2num < - function(x) {utf8ToInt(x) - utf8ToInt("a") + 1L} 

Aquí hay una breve prueba:

 letter2num("e") #[1] 5 set.seed(123) myletters < - letters[sample(26,8)]] #[1] "h" "t" "j" "u" "w" "a" "k" "q" unname(sapply(myletters, letter2num)) #[1] 8 20 10 21 23 1 11 17 

La función calcula el código utf8 de la carta a la que se le pasa, resta de este valor el código utf8 de la letra "a" y lo sum a este valor para garantizar que se observe la convención de indexación de R, según la cual la numeración de las letras comienza en 1, y no en 0.

El código funciona porque la secuencia numérica de los códigos utf8 que representan letras respeta el orden alfabético.


Para mayúsculas, puede usar, en consecuencia,

 LETTER2num < - function(x) {utf8ToInt(x) - utf8ToInt("A") + 1L} 

La función which parece apropiada aquí.

 which(letters == 'e') #[1] 5 

gracias por todas las ideas, pero soy un dumdum.

Esto es lo que hice. Hizo un mapeo de cada letra a un número específico, luego llamé cada letra

 df=data.frame(L=letters[1:26],N=rnorm(26)) df[df$L=='e',2]