HOWTO · R
Einen Faktor in R in numerische Werte umwandeln
Erfahren Sie, wie Sie R-Faktoren sicher in numerische Beschriftungen umwandeln, Faktorcodes von Werten unterscheiden und ungültige Beschriftungen behandeln.
Auf dieser Seite
Verwenden Sie as.numeric(as.character(f)), wenn ein Faktor f numerische Beschriftungen enthält und Sie diese als Zahlen benötigen. Ein direkter Aufruf von as.numeric(f) gibt stattdessen die internen ganzzahligen Codes des Faktors zurück. Die direkte Konvertierung ist nur sinnvoll, wenn diese Codes bewusst als Kategorie-IDs verwendet werden.
Verstehen, was as.numeric für einen Faktor zurückgibt
R-Faktoren enthalten ganzzahlige Codes und einen separaten Satz von Zeichenebenen. Die Codes verweisen auf die Ebenen in ihrer sortierten oder ausdrücklich angegebenen Reihenfolge; sie sind nicht automatisch die ursprünglichen Messwerte. Mit levels() und unclass() können Sie beide Bestandteile prüfen.
Die Ausgabe von as.numeric(f) ist eine Codefolge wie 2 1 2 3. Das bedeutet nicht, dass die ursprünglichen Werte 2, 1, 2 und 3 waren. Dieser Unterschied ist wichtig, wenn ein Datenrahmen eine numerisch aussehende Spalte als Faktor importiert hat.
Numerisch aussehende Faktorbeschriftungen in Zahlen umwandeln
Konvertieren Sie den Faktor zuerst in Zeichen und anschließend die Beschriftungen in numerische Werte:
f <- factor(c("3", "2", "3", "4"))
values <- as.numeric(as.character(f))
values
Bei einem Faktor mit nachweislich numerischen Ebenen ist as.numeric(levels(f))[f] eine effiziente Alternative. Beide Varianten stellen die Beschriftungen statt der internen Codes wieder her. Die Zeichenkonvertierung ist meist leichter zu lesen und macht beide Umwandlungsschritte deutlich.
Dezimalzahlen und negative numerische Beschriftungen funktionieren genauso. Führen Sie die Konvertierung möglichst beim Importieren oder Bereinigen durch und prüfen Sie das Ergebnis mit str() oder class(), bevor Sie damit rechnen.
Kategoriebeschriftungen bewusst codieren
Wenn die Beschriftungen Kategorien darstellen, dürfen ihre Codes nicht als Messwerte behandelt werden. Legen Sie die Kategorienreihenfolge ausdrücklich fest, wenn eine stabile ID erforderlich ist:
grade <- factor(c("low", "high", "low"), levels = c("low", "high"))
codes <- as.numeric(grade)
codes
Hier sind 1 und 2 Kategoriecodes, weil die Reihenfolge ausdrücklich festgelegt wurde. Daraus folgt nicht, dass high doppelt so groß wie low ist. Für eine geschäfts- oder modellspezifische Zuordnung ist eine benannte Nachschlagetabelle eindeutiger:
grade <- c("low", "high", "low")
score <- c(low = 10, high = 20)[grade]
score
So bleibt die Bedeutung jedes numerischen Werts sichtbar, ohne von der standardmäßigen Reihenfolge der Faktorebenen abzuhängen.
Nicht numerische Beschriftungen, fehlende Werte und Warnungen behandeln
Die Zeichenkonvertierung kann beliebige Beschriftungen nicht in Zahlen verwandeln. Nicht numerischer Text wird zu NA, und R gibt eine Umwandlungswarnung aus; ein bereits fehlender Wert bleibt fehlend:
f <- factor(c("12.5", "oops", NA))
values <- as.numeric(as.character(f))
values
is.na(values)
Behandeln Sie unerwartete NA-Werte als Hinweis auf ein Datenqualitätsproblem. Prüfen Sie die ursprünglichen Beschriftungen, entfernen oder normalisieren Sie gegebenenfalls Leerzeichen und entscheiden Sie vor der Analyse, wie ungültige Datensätze behandelt werden sollen. Ersetzen Sie sie nicht stillschweigend durch null. Sind die Beschriftungen kategorisch statt numerisch, verwenden Sie eine explizite Zuordnung oder einen ausdrücklich geordneten Faktor.
Die Konvertierung überprüfen
Bevor Sie sich auf das Ergebnis verlassen, prüfen Sie die Quellklasse, die Ebenen, die konvertierten Werte und alle Warnungen. Die Kurzregel lautet:
- Verwenden Sie
as.numeric(f)für beabsichtigte Faktorcodes; - verwenden Sie
as.numeric(as.character(f))für numerische Beschriftungen; - verwenden Sie für Kategorien eine explizite Reihenfolge oder eine benannte Zuordnung; und
- prüfen Sie nach der Konvertierung importierten Textes die
NA-Werte.
Moderner R-Code sollte Importtypen oder Faktorebenen bewusst festlegen, statt sich auf historische Standardeinstellungen zur Umwandlung von Zeichenfolgen in Faktoren zu verlassen. Diese Prüfungen machen die beabsichtigte Bedeutung jedes numerischen Ergebnisses deutlich.