GNU R: factor

Aus Wikibooks

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]

Weblinks[Bearbeiten]