2016-07-26 36 views
-2

Ich habe eine Datenmatrix von 4 Spalten und mehr als 20 Tausend Zeilen bestehend aus Einträgen mit Zahlen, Großbuchstaben, Bindestrichen und Punkten. Ich möchte sie als ihren ASCII-Code, Zahlen darstellen. Ich habe versucht, die Funktionen tttoi, chartoraw und utf8toint zu verwenden, erhielt aber ständig Fehler, hauptsächlich "die Anzahl der zu ersetzenden Elemente ist kein Vielfaches der Ersatzlänge".Char Matrix zu Numerisch in R

Wie kann ich die gesamte Matrix in eine numerische Matrix ohne NA-Zwangs konvertieren?

+3

Geben Sie einen 'dput (Kopf (your_matrix)', da ich nicht bekommen können, wie Sie verschiedene Klassen in einer Matrix haben – Tensibai

+3

Bitte lesen. die Informationen über [wie man eine gute Frage stellt] (http://stackoverflow.com/help/how-to-ask) und wie man ein [reproduzierbares Beispiel gibt] (http://stackoverflow.com/questions/5963269/ How-to-make-a-great-r-reproduzierbar-Beispiel/5963610) Dies wird es viel einfacher für andere, Ihnen zu helfen. – Jaap

Antwort

0

Nicht sicher, Ihre Frage, aber wenn Sie Matrizen von Zeichen in numerische konvertieren möchten, betrachten Sie eine kryptografische Digest.

x <- matrix(letters[1:9],3,3) 
x 
    [,1] [,2] [,3] 
[1,] "a" "d" "g" 
[2,] "b" "e" "h" 
[3,] "c" "f" "i" 

digest(x) 
[1] "b94e24be564d1af6dfedba8c3616b56d" 
+0

Hallo, vielen Dank für Ihre Antwort! Nun, ich wi Versuchen Sie, die Nummern in der Liste als eine Zahl zu kombinieren. Zum Beispiel ist c (65, 89, 65, 69, 73, 65, 73, 65, 73, 66, 46) eines der Elemente in der Matrix. Ich möchte es als 658965697365736646 darstellen und es als eine ganze Zahl interpretieren. Ist das möglich? –

0
> (tmp <- matrix(c(LETTERS[1:20],"3","?","a","-"),6)) 
    [,1] [,2] [,3] [,4] 
[1,] "A" "G" "M" "S" 
[2,] "B" "H" "N" "T" 
[3,] "C" "I" "O" "3" 
[4,] "D" "J" "P" "?" 
[5,] "E" "K" "Q" "a" 
[6,] "F" "L" "R" "-" 
> (tmp <-apply(tmp,c(1,2), utf8ToInt)) 
    [,1] [,2] [,3] [,4] 
[1,] 65 71 77 83 
[2,] 66 72 78 84 
[3,] 67 73 79 51 
[4,] 68 74 80 63 
[5,] 69 75 81 97 
[6,] 70 76 82 45 
> intToUtf8(tmp) 
[1] "ABCDEFGHIJKLMNOPQRST3?a-" 

bearbeiten per Kommentar:

#Altered paste function which we will call twice 
pasteC <- function(x){paste(x,collapse="")} 
#Replicate your example of a cell elements being a list 
values <-c(LETTERS[1:20],"3","?","a","-") 
#place in a data.frame 
tmp <- data.frame(id = 1:20) 
tmp$var <- list(values) 
tmp$var.int <- sapply(tmp$var, function(x) pasteC(utf8ToInt(pasteC(x)))) 
tmp 
+0

Hallo, danke für deine Antwort, es hat wirklich geholfen! Jetzt werde ich versuchen, den Zahlenvektor als eine Zahl zu verbinden. Zum Beispiel ist c (65, 89, 65, 69, 73, 65, 73, 65, 73, 66, 46) eines der Elemente in der Matrix. Ich möchte es als 658965697365736646 darstellen und es als eine ganze Zahl interpretieren. Ist das möglich? –