Wie lässt man Zeilen mit NA in nur zwei Spalten in R aus?

8

Ich möchte Zeilen weglassen, in denen NA in beiden von zwei Spalten erscheint.

Ich bin mit na.omit , is.na und complete.cases vertraut, kann aber nicht herausfinden, wie ich diese benutze, um zu bekommen, was ich will. Zum Beispiel habe ich den folgenden Datenrahmen:

%Vor%

und ich möchte nur die Zeilen entfernen, in denen NA in den Spalten x und y erscheint (ausgenommen alles in z), um

zu erhalten %Vor%

Kennt jemand einen einfachen Weg, dies zu tun? Die Verwendung von na.omit , is.na oder complete.cases funktioniert nicht.

    
Thomas 05.08.2014, 17:16
quelle

4 Antworten

11
%Vor%

Ich habe einen etwas größeren Datensatz verglichen. Hier sind die Ergebnisse:

%Vor%     
akrun 05.08.2014, 17:20
quelle
8

Verwenden Sie rowSums mit is.na , wie folgt:

%Vor%

Wenn Sie auf den Benchmarking-Wagen springen und demonstrieren, was ich damit meinte, dass es sich hierbei um eine relativ leicht generalisierbare Lösung handelt, beachten Sie Folgendes:

%Vor%

Zunächst sehen Sie, wie die Dinge aussehen, wenn Sie nur an zwei Spalten interessiert sind. Beide Lösungen sind gut lesbar und kurz. Geschwindigkeit ist ziemlich nah.

%Vor%

Sehen wir uns als nächstes das gleiche Problem an, aber dieses Mal betrachten wir NA Werte in den ersten 5 Spalten. An dieser Stelle ist der rowSums -Ansatz etwas schneller und die Syntax ändert sich nicht viel.

%Vor%     
A5C1D2H2I1M1N2O1R2T1 05.08.2014 17:20
quelle
7

Sie können anwenden, um die Zeilen zu teilen:

%Vor%

Dann können Sie damit auswählen:

%Vor%

Um die z-Spalte zu ignorieren, lassen Sie sie einfach weg von der Anwendung:

%Vor%

Wenn alle TRUE sein müssen, ändere einfach die Funktion etwas:

%Vor%

Die anderen Lösungen hier sind spezifischer für dieses spezielle Problem, aber apply ist es wert, gelernt zu werden, da es viele andere Probleme löst. Die Kosten sind Geschwindigkeit (übliche Vorbehalte gegenüber kleinen Datensätzen und Geschwindigkeitstests gelten):

%Vor%     
Ari B. Friedman 05.08.2014 17:20
quelle
0

dplyr Lösung

%Vor%

kann mit dem .vars -Argument

geändert werden, um beliebige Zahlenspalten zu übernehmen     
pyg 11.01.2018 01:57
quelle

Tags und Links