Dplyr - Filter, wenn eine variable gleich einen Wert
Ich habe einen Datensatz a
mit 5 Variablen und filtern wollen es so:
a1 <- a %>% filter(var_1 != 1 , var_2 != 1 , var_3 != 1 , var_4 != 1 , variable_5 != 1)
Ich Frage mich, ob so etwas (pseudo code) Bestand:
a1 <- a %>% filter(anyvariable != 1)
In anderen Worten, ich möchte, um loszuwerden, alle die Zeilen mit dem Wert 1, egal wo es erscheint.
1 ist nur eine zufällige Zahl. Es hätte 9, 99, oder was auch immer sonst!
Danke!
- Ihre
|
Zustand bedeutet, Sie filtern möchten, und halten Sie die Zeilen, in denen nicht alle Spalten eine 1, aber deine Formulierung sagt, loszuwerden, alle Zeilen mit einer 1 in jeder Spalte position. Können Sie das klären? - Hallo Gopala, danke. Es sollte mit Kommas anstatt |. Der Wortlaut korrekt ist.
- Haben Sie gedacht, um eine Zeile zu entfernen mit einem Wert 1, da dein code ist verwirrend
- Hallo Jungs, entschuldigt. Ich möchte zum entfernen alle Zeilen mit einer 1 egal wo es erscheint. In anderen Worten, ich möchte so entfernen Sie alle Zeilen mit mindestens einer 1.
- Überprüfen Sie bitte mein update. Ich denke, es sollte funktionieren, für das, was Sie erwähnt
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten wir in der Lage sein zu verwenden
rowSums
Wenn ich es ändern zu
!=1
Beachten Sie, dass das entfernen der Zeilen mit alle 1s. In dem vorherigen Fall, es entfernt die Zeilen, die mit allen 0EN, die konsistent ist mit dem, was der OP erwähnt in der post.
Update
Wenn der OP will, entfernen Sie Zeilen mit der 1 (nur eine Zahl, er kann mit 9 oder 99 oder 999)
Daten
!=0
Sie es ändern können, basierend auf dem Wert, den Sie im Sinn habentidyverse
wir sollen Pfeifen. oder aber es kann getan werden, inbase R
sicha[rowSums(a!=0)>0,]
Können Sie
filter_all
in Kombination mitall_vars
ausdplyr
wie folgt:Dadurch entfernen Sie Zeilen, in denen eine variable enthält 1. In dem obigen Beispiel, wird die erste und die Dritte Zeile. Jedoch vorsichtig sein mit NA-Werte:
Beachten Sie, dass die zweite Zeile nicht enthalten ist eine 1, aber gefiltert wird, sowieso. In diesem speziellen Beispiel, können Sie vermeiden dies, indem Sie:
Jedoch kann dies nicht verallgemeinern.
Hier sind einige praktische Funktionen in form OP beantragt:
Hier ist das Ergebnis auf OP ' s test variable:
Diese Funktionen haben den Vorteil, zu arbeiten, ohne die pipe-Schreibweise:
Können Sie versuchen, zu kombinieren mit der
apply
Funktion in der pipeline:rowSums
.rowSum()
ist ein viel besserer Weg, um dieses problem anzugehen.Gibt es keine
filter_each
imdplyr
, so eine Lösung basierend auf rowSums ist ein tragfähiges. Dieses Posting sehr einfache Basis-option, obwohl man vielleicht lieber einefilter
Lösung so zu integrieren, und die Ausgabe in diedplyr
pipeline mit zusätzlichen Operationen.Ändern
1
oben auf was auch immer Wert, es Arbeit, die für die Filterung auf andere Werte. Diese Lösung ist deutlich schneller als dieapply
basiertfilter
Lösung und geringfügig langsamer alsdplyr
Paket istfilter
mitrowSums
.