2016-04-07 8 views
0

Ich habe einen Datenrahmen mit> 2000 Funktionen. Kategorische, numerische und logische Typen.dynamische Filterzeilen in R

Die Einschränkung für die weitere Verarbeitung besteht darin, dass die numerischen Merkmale keinen Wert < 0 haben sollten. Diese sind jedoch im Satz vorhanden.

Ich möchte jetzt einen Weg, wie alle Beispiele (Zeilen) aus dem zugrunde liegenden Datensatz entfernt werden, wo mindestens ein numerisches Merkmal negativ ist.

Bereits versucht es auf diese Weise apply(df, 1, function(x) any(as.numeric(x) <0)) Allerdings konvertieren diese meine kategorischen Funktionen zu NaN.

+1

Bitte geben Sie ein kleines reproduzierbares Beispiel von Daten (Verwendung 'dput') Prüfung von möglichen Lösungen zu ermöglichen: http://stackoverflow.com/a/5963610/1412059 – Roland

Antwort

0

Zuerst finden alle numerischen Spalten:

df.classes <- lapply(df, class) 
df.num  <- c(which(df.classes == "numeric"), which(df.classes == "integer")) # if you also want to include integer 

Dann würde ich über df[, df.num] gehen und sehen, ob es irgendwelche negative Werte sind, z.B. mit rowSums(any(df[, df.num] < 0)). Dann verwerfen Sie alle Zeilen mit einem Wert für diese > 0.

Viel Glück!

+0

Sie sind absolut richtig! Nun, zuerst teilen Sie die Daten nach Typen lösen Sie es. Das funktioniert für mich. –

0

Hier ist, wie ich es gelöst habe.

numeric <- df[,sapply(df,class) %in% c('numeric','integer')] 
result <- numeric[!apply(numeric,1,function(x) any(x < 0)),]