Effiziente Methode, um Zeilen mit NA-Werten in R zu unterteilen

8

Hintergrund Bevor ich eine schrittweise Modellauswahl ausführen kann, muss ich fehlende Werte für meine Modellbegriffe entfernen. Mit ein paar Begriffen in meinem Modell gibt es daher ziemlich viele Vektoren, die ich nach NA-Werten suchen muss (und alle Zeilen löschen, die NA-Werte in irgendeinem dieser Vektoren haben). Es gibt jedoch auch Vektoren, die NA-Werte enthalten, die ich nicht als Begriffe / Kriterien zum Löschen von Zeilen verwenden möchte.

Frage Wie lege ich Zeilen aus einem Datenrahmen ab, die NA-Werte für eine beliebige Liste von Vektoren enthalten? Ich verwende derzeit die klobige Methode einer langen Reihe von! Is.na's

%Vor%

aber ich bin sicher, dass es eine elegantere Methode gibt.

    
Oreotrephes 03.12.2013, 03:39
quelle

3 Antworten

12

Sei dat ein Datenrahmen und cols ein Vektor von Spaltennamen oder Spaltennummern, die von Interesse sind. Dann können Sie

verwenden %Vor%

um alle Zeilen mit mindestens einem NA auszuschließen.

    
Sven Hohenstein 05.12.2013, 20:16
quelle
7

Bearbeiten: Ich habe komplett über subset geschwärzt, die eingebaute Funktion, die für Sub-Setting-Dinge gemacht wird:

%Vor%

Ich verwende with() für solche Dinge. Benutze nicht attach , du musst dich selbst schneiden.

%Vor%

Aber wenn Sie das oft tun, möchten Sie vielleicht auch eine Hilfsfunktion, is_any()

%Vor%

Wenn Sie so viele Dinge tun, wird die Verwendung von SQL oft eine bessere Interaktion mit Teilmengen von Daten sein. dplyr kann sich ebenfalls als nützlich erweisen.

    
Tyler 03.12.2013 03:56
quelle
1

Dies ist eine Möglichkeit:

%Vor%

Und hier ist eine weitere, die sapply(...) und Reduce(...) verwendet:

%Vor%

Die erste Anweisung "wendet" die Funktion is.na(...) auf die Spalten 2: 4 von df an und invertiert das Ergebnis (wir wollen !NA ). Die zweite Anweisung wendet den logischen Operator & nacheinander auf die Spalten von xx an. Die dritte Anweisung extrahiert nur Zeilen mit yy=T . Natürlich kann dies zu einer erschreckend komplizierten Aussage kombiniert werden.

%Vor%

Die Verwendung von sapply(...) und Reduce(...) kann schneller sein, wenn Sie sehr viele Spalten haben.

Schließlich haben die meisten Modellierungsfunktionen Parameter, die so eingestellt werden können, dass sie direkt mit NAs umgehen (ohne auf all dies zurückzugreifen). Siehe zum Beispiel den Parameter na.action in lm (...) .

    
jlhoward 03.12.2013 05:09
quelle

Tags und Links