Ich habe einen Datenrahmen mit einem Faktor. Wenn ich eine Teilmenge dieses Datenrahmens unter Verwendung von subset()
oder einer anderen Indizierungsfunktion erstelle, wird ein neuer Datenrahmen erstellt. Die Faktorvariable behält jedoch alle ihre ursprünglichen Ebenen bei - auch wenn sie nicht im neuen Datenrahmen vorhanden sind.Drop-Faktor-Ebenen in einem Teildatenrahmen
Dies verursacht Kopfschmerzen beim facettierten Plotten oder bei der Verwendung von Funktionen, die auf Faktorstufen beruhen.
Was ist der prägnanteste Weg, um Ebenen von einem Faktor in meinem neuen Datenrahmen zu entfernen?
Hier ist mein Beispiel:
df <- data.frame(letters=letters[1:5],
numbers=seq(1:5))
levels(df$letters)
## [1] "a" "b" "c" "d" "e"
subdf <- subset(df, numbers <= 3)
## letters numbers
## 1 a 1
## 2 b 2
## 3 c 3
## but the levels are still there!
levels(subdf$letters)
## [1] "a" "b" "c" "d" "e"
Das ist in Ordnung für eine einmalige, aber in einem dat.frame mit einer großen Anzahl von Spalten, müssen Sie das für jede Spalte tun, die ein Faktor ist ... was dazu führt, dass eine Funktion wie drop.levels () von gdata. –
Ich sehe ... aber aus einer Benutzerperspektive ist es schnell, etwas wie subdf schreiben [] <- lapply (Subdf, Funktion (x) if (is.factor (x)) Faktor (x) sonst x) ... Ist drop.levels() bei großen Datenmengen viel effizienter oder besser? (Man müsste die obige Zeile in einer For-Schleife für einen riesigen Datenrahmen neu schreiben, nehme ich an.) – hatmatrix
Danke Stephen & Dirk - Ich gebe diesem einen Daumen hoch für die Fehler eines Faktors, aber hoffentlich werden die Leute Lesen Sie diese Kommentare für Ihre Vorschläge zur Bereinigung eines ganzen Datenrahmens von Faktoren. – medriscoll