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:
und ich möchte nur die Zeilen entfernen, in denen NA
in den Spalten x
und y
erscheint (ausgenommen alles in z), um
Kennt jemand einen einfachen Weg, dies zu tun? Die Verwendung von na.omit
, is.na
oder complete.cases
funktioniert nicht.
Verwenden Sie rowSums
mit is.na
, wie folgt:
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.
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:
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):