2014-04-16 33 views
7

Ich habe den folgenden Vektor:Konvertieren Zahlen Buchstaben

x <- c(11, 12, 21, 22) 

und ich möchte es auf die entsprechenden Buchstaben konvertieren, das heißt, ich will dieses Ergebnis erhalten:

AA AB BA BB 

Wie kann ich mach das? Ich wette, es gibt eine einfache Antwort und es geht durch die Verwendung des reservierten Vektors LETTERS, aber ich kann keine Lösung finden. Dies ist das beste, das ich habe es geschafft, mit so weit zu kommen (man könnte die Kinder aus dem Zimmer nehmen wollen):

> paste0(gsub(1, LETTERS[1], substr(x, 1, 1)), 
     gsub(2, LETTERS[2], substr(x, 1, 1))) 
[1] "A1" "A1" "2B" "2B" 

Antwort

10

ist Da hierbei nur eine Eins-zu-Eins-Zeichen ersetzt, könnte es sein, am einfachsten zu verwenden chartr()

chartr("123456789", "ABCDEFGHI", x) 
# [1] "AA" "AB" "BA" "BB" 
3

Wie das?

x <- c(11, 12, 21, 22) 

s1 = as.numeric(substr(x, start=1, stop=1)) 
s2 = as.numeric(substr(x, start=2, stop=2)) 

print(paste0(LETTERS[s1], LETTERS[s2])) 

>[1] "AA" "AB" "BA" "BB" 
2

oder so:

sapply(strsplit(as.character(c(123,11,22,5612)),""), function(x) paste0(LETTERS[as.integer(x)], collapse="")) 
    ## [1] "ABC" "AA" "BB" "EFAB" 
4

Ohne Bibliotheken, die kompakte einzeilige Lösung

sapply(strsplit(paste(x),''), function(y) paste(LETTERS[as.numeric(y)], collapse = '')) 
# [1] "AA" "AB" "BA" "BB" 
+0

Nice one, aber bedenken Sie, dass, wenn dies mit einer Null konfrontiert wird, es das leere Zeichen zurückgibt und somit 1 und 10 beide als "A" darstellt. –

Verwandte Themen