factor() erzeugt ein Faktor-Objekt.


Handhabung

Bearbeiten

Faktoren sind in R nominale Daten, wie beispielsweise die Unterteilung von Probanden nach dem Geschlecht. Um mehrere Daten einem Faktor zuzuordnen, wird der factor-Befehl mit dem c-Befehl kombiniert:

geschlecht <- factor(c("m", "m", "w", "m", "w", "w", "w", "m", "m", "w", "m", "w"))


Wenn wir nun das Objekt geschlecht aufrufen, erhalten wir:

geschlecht
[1] m m w m w w w m m w m w
Levels: m w

Es werden die Daten, die in geschlecht enthalten sind, angezeigt. Am Ende der Ausgabe wird mit Levels: m w angezeigt, dass der Faktor geschlecht die zwei Ausprägungen "m" und "w" hat.


Level löschen

Bearbeiten

Manchmal kann es vorkommen, dass ein Factor noch Ausprägungen (Levels) besitzt, die im Datensatz gar nicht mehr vorkommen.

beispiel <- factor(c("Blau", "Weiss", "Links", "Weiss", "Links", "Links"))

Das Objekt sieht nun so aus:

beispiel

[1] Blau  Weiss Links Weiss Links Links
Levels: Blau Links Weiss

Wenn wir jetzt den ersten Eintrag (Blau) löschen...

beispiel <- beispiel[-1]

...und das Objekt erneut betrachten...

beispiel

[1] Weiss Links Weiss Links Links
Levels: Blau Links Weiss

...sehen wir, dass die Level "Blau" immernoch existiert, obwohl kein Eintrag im Objekt mehr diese Level besitzt. Um die Level "Blau" nun zu löschen, gibt man ein:

beispiel <- beispiel[drop=TRUE]

Wenn das Objekt nun aufgerufen wird

beispiel

[1] Weiss Links Weiss Links Links
Levels: Links Weiss

sieht man, dass die nicht länger benötigte Level "Blau" gelöscht wurde.

Probleme und Fehlerquellen

Bearbeiten

In anderen Statistikanwendungen ist es üblich, Faktoren numerisch einzugeben und in Bedingungen zu verwenden. Dies ist auch in R möglich, allerdings nur, wenn eine Klassenumwandlung vorgenommen wird:

> unclass(geschlecht)        # Umwandlung in einen Integervektor
[1] 1 1 2 1 2 2 2 1 1 2 1 2
attr(,"levels")
[1] "m" "w"
> geschlecht==1              # funktioniert nicht, da "m" oder "w" nicht == 1
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> unclass(geschlecht)==1     # korrekte Bedingung
TRUE  TRUE FALSE  TRUE FALSE FALSE FALSE  TRUE  TRUE FALSE  TRUE FALSE

siehe auch

Bearbeiten
Bearbeiten