Wie lässt sich ein Faktor ohne Informationsverlust in ganzzahlige Zahlen umwandeln?
Wenn ich einen Faktor in einen numerischen oder ganzzahligen Wert umwandle, erhalte ich die zugrunde liegenden Ebenencodes und nicht die Werte als Zahlen.
f <- factor(sample(runif(5), 20, replace = TRUE))
## [1] 0.0248644019011408 0.0248644019011408 0.179684827337041
## [4] 0.0284090070053935 0.363644931698218 0.363644931698218
## [7] 0.179684827337041 0.249704354675487 0.249704354675487
## [10] 0.0248644019011408 0.249704354675487 0.0284090070053935
## [13] 0.179684827337041 0.0248644019011408 0.179684827337041
## [16] 0.363644931698218 0.249704354675487 0.363644931698218
## [19] 0.179684827337041 0.0284090070053935
## 5 Levels: 0.0248644019011408 0.0284090070053935 ... 0.363644931698218
as.numeric(f)
## [1] 1 1 3 2 5 5 3 4 4 1 4 2 3 1 3 5 4 5 3 2
as.integer(f)
## [1] 1 1 3 2 5 5 3 4 4 1 4 2 3 1 3 5 4 5 3 2
Ich muss auf "Einfügen" zurückgreifen, um die echten Werte zu erhalten:
as.numeric(paste(f))
## [1] 0.02486440 0.02486440 0.17968483 0.02840901 0.36364493 0.36364493
## [7] 0.17968483 0.24970435 0.24970435 0.02486440 0.24970435 0.02840901
## [13] 0.17968483 0.02486440 0.17968483 0.36364493 0.24970435 0.36364493
## [19] 0.17968483 0.02840901
Gibt es eine bessere Möglichkeit, einen Faktor in einen numerischen Wert umzuwandeln?
559
3
Siehe den Abschnitt Warnung in
?factor
:Insbesondere ist
as.numeric
angewendet aufDie FAQ zu R enthält ähnliche Ratschläge.
Warum ist
as.numeric(levels(f))[f]
effizienter alsas.numeric(as.character(f))
?as.numeric(as.character(f))
ist im Grunde genommen as.numeric(levels(f)[f])
, d.h. Sie führen die Konvertierung in numerische Werte fürlength(x)
-Werte und nicht fürnlevels(x)
-Werte durch. Der Geschwindigkeitsunterschied wird bei langen Vektoren mit wenigen Ebenen am deutlichsten. Wenn die Werte größtenteils eindeutig sind, gibt es keinen großen Geschwindigkeitsunterschied. Wie auch immer Sie die Konvertierung durchführen, es ist unwahrscheinlich, dass diese Operation der Engpass in Ihrem Code ist, also machen Sie sich nicht zu viele Gedanken darüber.Einige Zeitangaben
R verfügt über eine Reihe von (undokumentierten) Komfortfunktionen zur Umrechnung von Faktoren:
as.character.factor
as.data.frame.factor
as.Datum.Faktor
as.list.factor
as.vector.factor
Aber ärgerlicherweise gibt es nichts, um die Faktor -> numerische Konvertierung zu behandeln. Als Erweiterung der Antwort von Joshua Ulrich würde ich vorschlagen, diese Lücke durch die Definition einer eigenen idiomatischen Funktion zu schließen:
Dies ist nur möglich, wenn die Faktorbezeichnungen mit den ursprünglichen Werten übereinstimmen. Ich werde es anhand eines Beispiels erklären.
Angenommen, die Daten sind der Vektor "x":