2016-05-15 26 views
3

Ich habe eine Reihe von Briefen, und kann nicht für das Leben von mir herausfinden, wie man sie in ihre entsprechende Zahl konvertieren.konvertieren Buchstaben zu Zahlen

letters[1:4] 

Gibt es eine Funktion

numbers['e'] 

, die definiert

5 

oder etwas Benutzer zurückgibt (dh 1994)?

Ich möchte alle 26 Buchstaben auf einen bestimmten Wert konvertieren.

Antwort

0

danke für alle Ideen, aber ich bin ein Dummkopf.

Hier ist was ich getan habe. Sie macht eine Abbildung von jedem Buchstaben auf eine bestimmte Anzahl, rief dann jeden Buchstaben

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

ein Lookup-Vektor Erstellen und einfaches subsetting verwenden:

x <- letters[1:4] 
lookup <- setNames(seq_along(letters), letters) 
lookup[x] 
#a b c d 
#1 2 3 4 

Verwenden unname, wenn Sie die Namen entfernen mögen.

13

Ich weiß nicht von einer "vorgebauten" Funktion, aber solch ein Mapping ist ziemlich einfach einzurichten mit match. Für das spezielle Beispiel, das Sie geben, einen Brief an seine Position im Alphabet passend, können wir den folgenden Code verwenden:

myLetters <- letters[1:26] 

match("a", myLetters) 
[1] 1 

Es ist fast so einfach andere Werte auf die Buchstaben zu verknüpfen. Das folgende Beispiel zeigt eine zufällige Auswahl von Ganzzahlen.

# 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 

Beachten Sie, dass diese Methode auch auf geordnete Sammlungen von Buchstaben (Strings) erweitert werden kann.

+0

Ich bevorzuge diese Lösung über 'die (x == Buchstaben)', weil es vektorisiert ist (ich kann die Buchstabenindizes für einen Vektor von Charakteren erhalten). – rensa

5

Diese Funktion könnte versuchen:

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

Hier ist ein kurzer Test:

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 

Die Funktion berechnet Der utf8-Code des Buchstabens, an den er übergeben wird, subtrahiert von diesem Wert den utf8-Code des Buchstabens "a" und addiert zu diesem Wert die Zahl eins, um sicherzustellen, dass die Indexkonvention von R eingehalten wird zu dem die Nummerierung der Buchstaben bei 1 und nicht bei 0 beginnt.

Der Code funktioniert, weil die Ziffernfolge der utf8-Codes, die Buchstaben darstellen, der alphabetischen Reihenfolge entspricht.


Für Großbuchstaben Sie dementsprechend

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

Die which Funktion scheint hier angebracht nutzen könnten.

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