Faktor in R: Kategoriale Variable und kontinuierliche Variablen
⚡ Intelligente Zusammenfassung
Factor in R speichert kategoriale Daten als Vektor von ganzzahligen Codes, die mit einer Menge von Stufen gepaart sind. Dadurch trennt die Sprache eine begrenzte Gruppe von Kategorien von einer kontinuierlichen Messung.

Was ist der Faktor in R?
Berücksichtigen Sie R Ein Faktor ist eine Variable, die zur Kategorisierung und Speicherung von Daten dient und eine begrenzte Anzahl an Ausprägungen annehmen kann. Er speichert die Daten als Vektor von Ganzzahlen. In R wird ein Faktor auch als kategoriale Variable bezeichnet, die sowohl Zeichenketten als auch Ganzzahlen als Ausprägungen speichert. Faktoren werden hauptsächlich in der statistischen Modellierung und explorativen Datenanalyse mit R verwendet.
Intern besteht ein Faktor aus zwei gemeinsam übertragenen Objekten: einem ganzzahligen Vektor von Codes und einem Zeichenattribut namens LevelJeder Code entspricht einer Position im Vektor der Ebenen, weshalb die Ausgabe eines Faktors Wörter anzeigt, während unclass() zeigt Zahlen an.
In einem Datensatz können wir zwei Arten von Variablen unterscheiden: kategorisch und kontinuierlich.
- In der deskriptiven Statistik für kategoriale Variablen in R ist der Wert begrenzt und basiert normalerweise auf einer bestimmten endlichen Gruppe. Eine kategoriale Variable in R kann beispielsweise Länder, Jahr, Geschlecht, Beruf sein.
- Eine stetige Variable kann hingegen beliebige Werte annehmen, von ganzen Zahlen bis hin zu Dezimalzahlen. Beispiele hierfür sind der Umsatz, der Aktienkurs usw.
Diese Unterscheidung ist wichtig, da R standardmäßig unterschiedliche Werte für jeden Datentyp wählt. Eine numerische Spalte wird mit Mittelwert und Median zusammengefasst, während ein Faktor mit Häufigkeiten pro Ausprägung dargestellt wird. Die Speicherung einer Kategorie als Text oder als Zahl beeinflusst daher die Analyseergebnisse. Die weiteren Speichermodi werden im Leitfaden zu R erläutert. R-Datentypen und Operatoren.
Kategorische Variablen
Kategoriale Variablen in R werden in einem Faktor gespeichert. Sehen wir uns den folgenden Code an, um eine Zeichenkettenvariable in R in eine Faktorvariable umzuwandeln. Viele Modellierungs- und Machine-Learning-Routinen können keinen Rohdatentext verarbeiten, daher müssen die Kategorien vor dem Anpassen des Modells als Stufen oder Zahlen kodiert werden.
Syntax
factor(x = character(), levels, labels = levels, ordered = is.ordered(x))
Die R-Basisreferenzdokumente enthalten zwei weitere Argumente, die in der obigen Kurzform ausgelassen werden: ausschließen, wodurch Werte entfernt werden, bevor das Levelset erstellt wird, und nmax, eine obere Schranke für die Anzahl der Ebenen, die die Konvertierung sehr großer Vektoren beschleunigt.
Argumente:
- x: Ein Vektor von kategorialen Daten in R. Muss eine Zeichenkette oder eine ganze Zahl sein, keine Dezimalzahl.
- LevelEin Vektor mit möglichen Werten für x. Dieses Argument ist optional. Der Standardwert ist die Liste der eindeutigen Elemente des Vektors x, sortiert in aufsteigender Reihenfolge.
- Etiketten: Fügt den kategorialen Daten x in R eine Bezeichnung hinzu. Zum Beispiel kann 1 die Bezeichnung „männlich“ und 0 die Bezeichnung „weiblich“ erhalten.
- ausschließenEin Vektor von Werten, die beim Bilden der Niveaumenge verworfen werden. Ausgeschlossene Werte werden im Ergebnis als NA (nicht verfügbar) dargestellt.
- bestelltEin logischer Indikator, der festlegt, ob die Ebenen in der angegebenen Reihenfolge als geordnet betrachtet werden sollen.
- nmax: Eine optionale obere Schranke für die Anzahl der Ebenen, nützlich bei langen Vektoren.
Ejemplo:
Wir wandeln einen Zeichenvektor in einen Faktor um und überprüfen die Änderung mit class().
# Create gender vector gender_vector <- c("Male", "Female", "Female", "Male", "Male") class(gender_vector) # Convert gender_vector to a factor factor_gender_vector <-factor(gender_vector) class(factor_gender_vector)
Ausgang:
## [1] "character" ## [1] "factor"
Die Klasse wechselte von Zeichenkette zu Faktor, und an den ausgegebenen Werten änderte sich nichts. Es ist wichtig, eine Transformation durchzuführen. Schnur in eine Faktorvariable in R vor einer maschinellen Lernaufgabe, denn das ist der Zeitpunkt, an dem die Kategorien zu einem festen, validierten Satz werden.
Eine kategoriale Variable in R kann unterteilt werden in nominale kategoriale Variable und ordinale kategoriale Variable.
Nominale kategoriale Variable
Eine nominale kategoriale Variable kann mehrere Werte annehmen, die Reihenfolge spielt jedoch keine Rolle. Zum Beispiel: männlich oder weiblich. Nominale kategoriale Variablen in R haben keine Rangfolge.
# Create a color vector color_vector <- c('blue', 'red', 'green', 'white', 'black', 'yellow') # Convert the vector to factor factor_color <- factor(color_vector) factor_color
Ausgang:
## [1] blue red green white black yellow ## Levels: black blue green red white yellow
Aus dem Faktor „Farbe“ lässt sich keine Reihenfolge ableiten. Die Stufenliste ist nur deshalb alphabetisch sortiert, weil kein Argument für „Stufen“ angegeben wurde; R hat die eindeutigen Werte daher selbst sortiert. Diese Sortierung orientiert sich am aktiven Gebietsschema und nicht an reinem ASCII. Dies ist ein Grund, die Stufen explizit anzugeben, wenn die Reihenfolge wichtig ist.
Ordinale kategoriale Variable
Ordinale kategoriale Variablen besitzen eine natürliche Ordnung. Die Rangfolge ergibt sich aus der Reihenfolge des Vektors, der an die entsprechende Funktion übergeben wird. Level Das Argument `ordered = TRUE` weist R an, die Sequenz als Rangfolge und nicht als einfache Liste zu behandeln. Die Einstellung `ordered = FALSE` kehrt die Rangfolge nicht um, sondern erzeugt lediglich einen gewöhnlichen, ungeordneten Faktor. Um von der höchsten zur niedrigsten Stufe zu ordnen, muss der Vektor der Stufen selbst umgekehrt werden.
Ejemplo:
Wir können die Zusammenfassung verwenden, um die Werte für jede Faktorvariable in R zu zählen.
# Create Ordinal categorical vector day_vector <- c('evening', 'morning', 'afternoon', 'midday', 'midnight', 'evening') # Convert `day_vector` to a factor with ordered level factor_day <- factor(day_vector, order = TRUE, levels =c('morning', 'midday', 'afternoon', 'evening', 'midnight')) # Print the new variable factor_day
Ausgang:
## [1] evening morning afternoon midday
midnight evening
Die Konsole gibt zuerst die Werte und darunter die Rangfolge aus. Der nächste Block beginnt mit der noch auskommentierten Zeile `Levels`, sodass die Rangfolge sichtbar bleibt, während der Aufruf von `summary()` an den vorherigen Code angehängt wird.
## Levels: morning < midday < afternoon < evening < midnight # Append the line to above code # Count the number of occurence of each level summary(factor_day)
Ausgang:
## morning midday afternoon evening midnight ## 1 1 1 2 1
R ordnete die Stufen gemäß dem Argument „levels“ von „Morgen“ bis „Mitternacht“. Da der Faktor geordnet ist, funktionieren Vergleichsoperatoren wie < und > auch hier, was beim oben genannten nominalen Farbfaktor nicht der Fall ist.
Kontinuierliche Variablen
Kontinuierliche Klassenvariablen sind in R der Standardwert. Sie werden als numerische Werte oder Ganzzahlen gespeichert. Dies lässt sich am folgenden Datensatz veranschaulichen. Der Datensatz `mtcars` ist vordefiniert und enthält Informationen zu verschiedenen Fahrzeugtypen. Er kann mit dem Befehl `mtcars` importiert werden. Die Klasse der Variable `mpg` (Meilen pro Gallone) wird überprüft. Sie liefert einen numerischen Wert, was auf eine kontinuierliche Variable hinweist.
dataset <- mtcars class(dataset$mpg)
Ausgang
## [1] "numeric"
Nicht jede numerische Spalte ist wirklich kontinuierlich. Im selben Datensatz enthält die Spalte „cyl“ nur die Werte 4, 6 und 8, und die Spalte „am“ nur die Werte 0 und 1. Beide sind also Kategorien, die zufällig als Zahlen gespeichert sind. Durch die Umwandlung mit `factor()` vor der Modellierung wird verhindert, dass R die Differenz zwischen 4 und 6 Zylindern als Messgröße interpretiert. Der umgekehrte Vorgang, das Aufteilen einer kontinuierlichen Spalte in Bänder, wird mit `cut()` durchgeführt.
Faktorstufen und -bezeichnungen in R
Das Attribut „levels“ ist der Teil eines Faktors, dessen Anpassung die meiste Zeit in Anspruch nehmen wird, da es sowohl die Ausgabe als auch die vom Modell als Basiswert festgelegte Variable steuert. Vier grundlegende R-Hilfsfunktionen decken nahezu alle Anwendungsfälle ab.
| Funktion | Was sie tut, | Typische Verwendung |
|---|---|---|
| Ebenen(f) | Liest oder ersetzt die Levelnamen | Abkürzungen in lesbare Bezeichnungen umbenennen |
| nlevels(f) | Gibt die Anzahl der Ebenen zurück | Die Überprüfung einer Kategorie führte nach dem Zusammenführen nicht zu einer Explosion. |
| relevel(f, ref) | Springt eine Ebene nach vorne | Auswahl der Basislinie für eine Regression |
| droplevels(f) | Entfernt Ebenen mit null Beobachtungen | Aufräumen nach dem Setzen von Teilmengen oder Filtern |
Der folgende Block wendet alle vier Faktoren auf die zuvor erstellten Farb- und Geschlechtsfaktoren an.
# Inspect the levels of an existing factor levels(factor_color) # the level names, in the order R stored them nlevels(factor_color) # how many distinct levels exist # Rename the levels in place (the new vector must follow the same order) levels(factor_color) <- c('Black', 'Blue', 'Green', 'Red', 'White', 'Yellow') # Attach labels at creation time instead of renaming afterwards gender_coded <- factor(c(1, 0, 0, 1, 1), levels = c(0, 1), labels = c('female', 'male')) # Make 'male' the reference level that modelling functions compare against gender_coded <- relevel(gender_coded, ref = 'male') # Remove levels that survived a subset but no longer occur in the data subset_color <- droplevels(factor_color[1:3])
Zwei Details sind wichtig. Die Zuweisung an `levels()` benennt anhand der Position um, sodass ein nicht übereinstimmender Vektor stillschweigend die falsche Kategorie neu beschriftet. Und eine Teilmenge behält alle ursprünglichen Ebenen bei, bis `droplevels()` aufgerufen wird, weshalb ein gefiltertes Datenrahmen kann weiterhin leere Balken darstellen. Etiketten Das Argument ist wiederum anders: Es benennt die Ebenen zum Zeitpunkt der Erstellung, und doppelte Bezeichnungen fassen mehrere Eingabewerte zu einer Ebene zusammen.
Wie man in R einen Faktor in eine Zahl oder ein Zeichen umwandelt
Dies ist der häufigste Fehler in der Faktorisierung von R. Da ein Faktor ganzzahlige Codes speichert, gibt der Aufruf von `as.numeric()` diese Codes anstelle der angezeigten Werte zurück. Der Faktor der Jahre 2021 bis 2023 wird als 1, 2 und 3 zurückgegeben.
# A factor whose labels happen to look like numbers year_factor <- factor(c('2021', '2023', '2022', '2023')) # WRONG: this returns the internal codes 1, 3, 2, 3 - not the years as.numeric(year_factor) # RIGHT: read the label through the levels attribute first as.numeric(levels(year_factor))[year_factor] # Equivalent and easier to remember, but slightly slower as.numeric(as.character(year_factor)) # Back to plain text as.character(year_factor)
Die R-Basisdokumentation empfiehlt `as.numeric(levels(f))[f]` als korrekten und etwas schnelleren Weg, wobei `as.numeric(as.character(f))` die lesbarere Alternative darstellt. Beide Methoden lesen zuerst die Bezeichnung und konvertieren sie anschließend.
- Faktor zum Charakter: as.character(f) gibt die Labels als Klartext zurück.
- Faktor in ganzzahlige Codes: as.integer(f) oder unclass(f), wenn die Codes das sind, was Sie tatsächlich wollen.
- Charakter zu Faktor: factor(x) oder die schnellere Kurzform as.factor(x).
- Numerisch zu Faktor: factor(x) für diskrete Codes, cut(x, breaks) für kontinuierliche Werte, die in Bänder unterteilt werden müssen.
Eine Sicherheitsvorkehrung gilt für alle. Wenn ein Wert in x nicht im Vektor „levels“ vorkommt, setzt factor() dieses Element auf NA, anstatt einen Fehler auszulösen. So können versehentlich Leerzeichen oder Unterschiede in der Groß- und Kleinschreibung Zeilen löschen. Der Vergleich eindeutiger Werte vor und nach der Konvertierung oder Sortieren des Datenrahmens in der neuen Spalte wird das Problem schnell sichtbar.
Faktor vs. Zeichenkette vs. Zahl in R: Wann verwendet man welchen Datentyp?
Die frühzeitige Wahl des Speichermodus spart später viel Zeit beim Debuggen. Die Tabelle vergleicht die drei Modi, die eine Spalte mit Text oder Code annehmen kann.
| Eigenschaft | Faktor | Charakter | Numerisch |
|---|---|---|---|
| Gespeichert als | Ganzzahlcodes plus ein Ebenenattribut | Streicher | Doubles oder ganze Zahlen |
| Fester Wertesatz | Ja, definiert durch Ebenen | Nein | Nein |
| Sonderanfertigung Display-Bestellung | Ja, durch verschiedene Ebenen | Nur alphabetisch | Nur numerisch |
| Arithmetik | Nicht erlaubt | Nicht erlaubt | Erlaubt |
| Modellkontraste | Automatisch erstellt | zuerst gezwungen | Wird als Messgröße behandelt |
Verwenden Faktor Wenn die Werte aus einer bekannten, abgeschlossenen Liste stammen, wenn die Anzeige- oder Rangfolge wichtig ist oder wenn die Spalte ein Modell oder eine Diagrammlegende speist. Charakter für Freitext, Kennungen und alles, was Sie analysieren oder verknüpfen möchten, wie z. B. Namen, Notizen und Codes, die ständig mit neuen Werten eintreffen. Verwenden Sie numerisch nur dann, wenn der Abstand zwischen zwei Werten sinnvoll ist.
Im folgenden Abschnitt werden die schnellsten Möglichkeiten aufgezeigt, um zu überprüfen, was Sie tatsächlich besitzen.
# Ask R what each column of a data frame actually is sapply(mtcars, class) # Direct membership tests is.factor(factor_day) is.ordered(factor_day) # unclass() exposes the integer codes hiding behind the labels unclass(factor_color)
Zwei Gewohnheiten sorgen für eine korrekte Auswahl. Führen Sie `sapply(df, class)` nach jedem Import aus, da ein einzelnes Zeichen in einer numerischen Spalte die gesamte Spalte in Text umwandelt. Konvertieren Sie die Daten außerdem so spät wie möglich in einen Faktor, nachdem sie bereinigt und zusammengeführt wurden. dplyr Joins und Filter vergleichen weiterhin einfache Zeichenketten anstatt nicht übereinstimmender Level-Sets.
