Filtern Sie einen Datenrahmen mit mehreren Bedingungen in R
- Filtern Sie einen Datenrahmen mit mehreren Bedingungen in R
- Verwendung von booleschen Operatoren
- Rangfolge bei der Auswertung von Ausdrücken
- Geben Sie die gewünschten Kombinationen mithilfe von Klammern an
-
Verwenden Sie den Operator
%in%
- Referenz
Das Filtern der Zeilen eines Datenrahmens ist ein häufiger Schritt in der Datenanalyse. In vielen Fällen müssen wir die Zeilen des Ergebnisses auf diejenigen beschränken, die mehr als eine Bedingung erfüllen.
Wenn solche mehreren Bedingungen involviert sind, müssen wir unser Wissen über mehrere Informationen kombinieren, um die gewünschten Ergebnisse zu erzielen. Diese betreffen:
- Verwendung von Booleschen Operatoren.
- Rangfolge bei der Auswertung von Ausdrücken.
- Verwendung von Klammern zur Angabe der gewünschten Auswertungsreihenfolge.
Filtern Sie einen Datenrahmen mit mehreren Bedingungen in R
Zunächst erstellen wir einen Beispieldatenrahmen für diesen Artikel. Wir werden auch das Paket dplyr
laden, um seine Funktion filter()
für unsere Demonstrationen zu verwenden.
Beispielcode:
# Create a data frame for the article.
SN = 1:7
Alph = c("M", "M", "N", "N", "K", "K", "M")
Nmbr = c(11, 22, 11, 22, 11, 22, 0)
tb = data.frame(SN, Alph, Nmbr)
tb
# Load the dplyr package.
library(dplyr)
Ausgang:
> tb
SN Alph Nmbr
1 1 M 11
2 2 M 22
3 3 N 11
4 4 N 22
5 5 K 11
6 6 K 22
7 7 M 0
Verwendung von booleschen Operatoren
Wir werden boolesche Operatoren verwenden, um mehrere Bedingungen zu kombinieren.
- Der
UND
-Operator&
gibt nurWAHR
zurück, wenn beide Bedingungen auf beiden Seiten zuWAHR
ausgewertet werden. - Der
OR
-Operator|
gibtTRUE
zurück, wenn eine der Bedingungen auf einer Seite oder sogar beide alsTRUE
ausgewertet werden. - Der
NOT
-Operator!
wandeltFALSE
-Bedingungen inTRUE
um und umgekehrt.
Wir werden relationale Operatoren verwenden, um Bedingungen anzugeben. Um Gleichheit zu vergleichen, ist der Operator ==
.
Beispielcode:
# Filter rows where Alph is "M" OR "N".
tb %>% filter(Alph=="M" | Alph == "N")
# Filter rows where Alph is "M" AND Nmbr == 22.
tb %>% filter(Alph=="M" & Nmbr == 22)
# Filter rows where Alph is NOT "M".
tb %>% filter(!Alph=="M")
Ausgang:
> # Filter rows where Alph is "M" OR "N".
> tb %>% filter(Alph=="M" | Alph == "N")
SN Alph Nmbr
1 1 M 11
2 2 M 22
3 3 N 11
4 4 N 22
5 7 M 0
> # Filter rows where Alph is "M" AND Nmbr == 22.
> tb %>% filter(Alph=="M" & Nmbr == 22)
SN Alph Nmbr
1 2 M 22
> # Filter rows where Alph is NOT "M".
> tb %>% filter(!Alph=="M")
SN Alph Nmbr
1 3 N 11
2 4 N 22
3 5 K 11
4 6 K 22
- Im ersten Beispiel haben wir (ausgewählte) Zeilen gefiltert, für die
Alph
M
oderN
ist. Beachten Sie, dass wir die vollständige Bedingung auf beiden Seiten desODER
-Operators angeben müssen. - Im zweiten Beispiel haben wir Zeilen gefiltert, für die
Alph
gleichzeitigM
undNmbr
gleich22
ist. - Im dritten Beispiel haben wir Zeilen gefiltert, bei denen die Spalte
Alph
nichtM
ist.
Rangfolge bei der Auswertung von Ausdrücken
Im Zusammenhang mit der Kombination mehrerer Bedingungen müssen wir die folgende Rangfolge der Operatoren beachten.
NOT
-Operator,!
.UND
-Operator,&
.ODER
-Operator,|
.- Operanden werden von links nach rechts gruppiert, vorbehaltlich des Obigen, es sei denn, es wird durch Klammern überschrieben.
Beispielcode:
# The ! operator only applies to the Alph column.
tb %>% filter(!Alph=="M" & Nmbr==11)
# The & operator only combines its two neighbors.
tb %>% filter(Alph=="M" & Nmbr==11 | Nmbr==22)
# The | operator gets applied AFTER &.
tb %>% filter(Nmbr==11 | Nmbr==22 & Alph=="M")
Ausgang:
> # The ! operator only applies to the Alph column.
> tb %>% filter(!Alph=="M" & Nmbr==11)
SN Alph Nmbr
1 3 N 11
2 5 K 11
> # The & operator only combines its two neighbors.
> tb %>% filter(Alph=="M" & Nmbr==11 | Nmbr==22)
SN Alph Nmbr
1 1 M 11
2 2 M 22
3 4 N 22
4 6 K 22
> # The | operator gets applied AFTER &.
> tb %>% filter(Nmbr==11 | Nmbr==22 & Alph=="M")
SN Alph Nmbr
1 1 M 11
2 2 M 22
3 3 N 11
4 5 K 11
Aufgrund der Rangfolge haben wir Folgendes gesehen:
- Das
!
Der Operator wurde aufAlph
angewendet, bevor der Operator&
die Bedingungen im ersten Beispiel kombinierte. - Der
&
-Operator kombiniert die beiden Bedingungen auf beiden Seiten, bevor das Ergebnis an die linke Seite des|
übergeben wird. Operator. - Im dritten Beispiel wurde zuerst das
&
angewendet. Auf der rechten Seite von|
haben wir das Ergebnis der ersten Anwendung von&
auf seine beiden Operanden.
Geben Sie die gewünschten Kombinationen mithilfe von Klammern an
Wir können Klammern verwenden, um mehrere Bedingungen zu gruppieren, um das gewünschte Ergebnis zu erhalten. Mithilfe von Klammern können wir die Reihenfolge der Operationen (Vorrang) steuern.
Wir verwenden die gleichen Beispiele im vorherigen Abschnitt, ändern sie jedoch mit Klammern, um andere Ergebnisse zu erhalten.
Beispielcode:
# The ! operator now applies to the result of the & operation.
tb %>% filter(!(Alph=="M" & Nmbr==11))
# The & operator now has the result of the | operator on its right.
tb %>% filter(Alph=="M" & (Nmbr==11 | Nmbr==22))
# Now, the | operator gets applied first, and the result is passed to &.
tb %>% filter((Nmbr==11 | Nmbr==22) & Alph=="M")
Ausgang:
> # The ! operator now applies to the result of the & operation.
> tb %>% filter(!(Alph=="M" & Nmbr==11))
SN Alph Nmbr
1 2 M 22
2 3 N 11
3 4 N 22
4 5 K 11
5 6 K 22
6 7 M 0
> # The & operator now has the result of the | operator on its right.
> tb %>% filter(Alph=="M" & (Nmbr==11 | Nmbr==22))
SN Alph Nmbr
1 1 M 11
2 2 M 22
> # Now, the | operator gets applied first, and the result is passed to &.
> tb %>% filter((Nmbr==11 | Nmbr==22) & Alph=="M")
SN Alph Nmbr
1 1 M 11
2 2 M 22
Aufgrund der Klammern erhalten wir nun unterschiedliche Ergebnisse.
-
Im ersten Beispiel wird das
!
Der Operator wird nun angewendet, nachdem der Operator&
die Bedingungen kombiniert hat. -
Im zweiten Beispiel wird das
|
Die Operation wird zuerst ausgeführt. Das Ergebnis wird dann als Operand rechts von&
übergeben. -
Im dritten Beispiel noch einmal das
|
wird zuerst durchgeführt. Beachten Sie, dass wir dasselbe Ergebnis wie im vorherigen Beispiel erhalten.Vergleichen Sie dies mit den unterschiedlichen Ergebnissen für diese im vorherigen Abschnitt.
Verwenden Sie den Operator %in%
Wir können den %in%
-Operator von R verwenden, um Zeilen zu filtern, für die der Spaltenwert einer der Werte ist, die in dem an ihn übergebenen Vektor erwähnt werden. Dies ist das Äquivalent zum Kombinieren mehrerer Bedingungen in derselben Spalte mit dem Operator OR
.
Beispielcode:
# Filter rows where Alph is M or K.
tb %>% filter(Alph %in% c("M", "K"))
Ausgang:
> # Filter rows where Alph is M or K.
> tb %>% filter(Alph %in% c("M", "K"))
SN Alph Nmbr
1 1 M 11
2 2 M 22
3 5 K 11
4 6 K 22
5 7 M 0
Referenz
Weitere Informationen zur Rangfolge bei der Auswertung von Ausdrücken finden Sie in Abschnitt 10.4.2 Infix- und Präfixoperatoren der R-Sprachdefinition.