Ich entschuldige mich, wenn es dafür bereits eine Antwort gibt ... Ich habe gesucht, konnte aber keine finden.Konvertieren von Faktorstufen in Zahlen
Ich versuche, eine Matrix von Faktoren in eine Matrix von Zahlen zu konvertieren, die jedem der Faktorwerte für die Spalte entspricht. Einfach, oder? Aber ich habe eine Reihe von sehr seltsamen Problemen erlebt, wenn ich das versuche.
Lassen Sie mich erklären. Hier ist ein Beispieldatensatz:
demodata2 <- matrix(c("A","B","B","C",NA,"A","B","B",NA,"C","A","B",NA,"B",NA,"C","A","B",NA,NA,NA,"B","C","A","B","B",NA,"B","B",NA,"B","B",NA,"C","A",NA), nrow=6, ncol=6)
democolnames <- c("Q","R","S","T","U","W")
colnames(demodata2) <- democolnames
Nachgeben:
Q R S T U W
[1,] "A" "B" NA NA "B" "B"
[2,] "B" "B" "B" NA "B" "B"
[3,] "B" NA NA NA NA NA
[4,] "C" "C" "C" "B" "B" "C"
[5,] NA "A" "A" "C" "B" "A"
[6,] "A" "B" "B" "A" NA NA
Ok. Also, was ich will, ist dies:
Q R S T U W
1 1 2 <NA> <NA> 1 2
2 2 2 2 <NA> 1 2
3 2 <NA> <NA> <NA> <NA> <NA>
4 3 3 3 2 1 3
5 <NA> 1 1 3 1 1
6 1 2 2 1 <NA> <NA>
Kein Problem. Lassen Sie uns versuchen as.numeric(demodata2)
> as.numeric(demodata2)
[1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[30] NA NA NA NA NA NA NA
Warning message:
NAs introduced by coercion
weniger als befriedigend. Lassen Sie uns versuchen nur eine Spalte ...
> as.numeric(demodata2[,3])
[1] NA NA NA NA NA NA
Warning message:
NAs introduced by coercion
* edit *
Diese sollen eigentlich Faktoren, nicht Zeichen (dank @Carl Witthoft und @smci) sein ... so lassen Sie uns dies machen in einen Datenrahmen ...
> demodata2 <- as.data.frame(demodata2)
> as.numeric(demodata2)
Error: (list) object cannot be coerced to type 'double'
Nein. Aber warten Sie ... hier ist es interessant ...
> as.numeric(demodata2$S)
[1] NA 2 NA 3 1 2
Nun, das ist richtig. Lassen Sie uns validieren Ich kann dies Calling Spalten nach Nummer:
> as.numeric(demodata2[,3])
[1] NA 2 NA 3 1 2
Ok. Also kann ich diese Spalte für Spalte meine neue Matrix assemblieren, indem ich durch ncol
mal iteriere ... aber gibt es einen besseren Weg?
Und warum barf, wenn es in Matrixform ist, im Gegensatz zu Datenrahmen? - bearbeiten eigentlich, das ist jetzt ziemlich offensichtlich ... in der Matrixform, das sind Zeichen, keine Faktoren. Mein Fehler. Frage steht immer noch über den Datenrahmen, obwohl ...
Vielen Dank! (und zeigt mir eine bestehende Antwort ist völlig in Ordnung)
Ihr Beispiel ist ** Nicht ** Faktoren. Sei vorsichtig mit deiner Nomenklatur. –
Ihr Beispiel ist eine Matrix von Strings, keine Faktoren. Strings haben keine Faktorstufen usw. – smci
Entschuldigung. Diese Frage wurde mit einem importierten Datensatz gestartet, bei dem automatisch Zeichenfolgen angenommen werden (sofern nicht anders angegeben). Der Fehler ist aufgetreten, als ich versucht habe, ihn für die Stackoverflow-Verwendung neu zu erstellen. – rucker