Filtern Sie einen Datenrahmen mit mehreren Bedingungen in R

Jesse John 21 Juni 2023
  1. Filtern Sie einen Datenrahmen mit mehreren Bedingungen in R
  2. Verwendung von booleschen Operatoren
  3. Rangfolge bei der Auswertung von Ausdrücken
  4. Geben Sie die gewünschten Kombinationen mithilfe von Klammern an
  5. Verwenden Sie den Operator %in%
  6. Referenz
Filtern Sie einen Datenrahmen mit mehreren Bedingungen in R

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:

  1. Verwendung von Booleschen Operatoren.
  2. Rangfolge bei der Auswertung von Ausdrücken.
  3. 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.

  1. Der UND-Operator & gibt nur WAHR zurück, wenn beide Bedingungen auf beiden Seiten zu WAHR ausgewertet werden.
  2. Der OR-Operator | gibt TRUE zurück, wenn eine der Bedingungen auf einer Seite oder sogar beide als TRUE ausgewertet werden.
  3. Der NOT-Operator ! wandelt FALSE-Bedingungen in TRUE 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
  1. Im ersten Beispiel haben wir (ausgewählte) Zeilen gefiltert, für die Alph M oder N ist. Beachten Sie, dass wir die vollständige Bedingung auf beiden Seiten des ODER-Operators angeben müssen.
  2. Im zweiten Beispiel haben wir Zeilen gefiltert, für die Alph gleichzeitig M und Nmbr gleich 22 ist.
  3. Im dritten Beispiel haben wir Zeilen gefiltert, bei denen die Spalte Alph nicht M ist.

Rangfolge bei der Auswertung von Ausdrücken

Im Zusammenhang mit der Kombination mehrerer Bedingungen müssen wir die folgende Rangfolge der Operatoren beachten.

  1. NOT-Operator, !.
  2. UND-Operator, &.
  3. ODER-Operator, |.
  4. 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:

  1. Das ! Der Operator wurde auf Alph angewendet, bevor der Operator & die Bedingungen im ersten Beispiel kombinierte.
  2. Der &-Operator kombiniert die beiden Bedingungen auf beiden Seiten, bevor das Ergebnis an die linke Seite des | übergeben wird. Operator.
  3. 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.

  1. Im ersten Beispiel wird das ! Der Operator wird nun angewendet, nachdem der Operator & die Bedingungen kombiniert hat.

  2. Im zweiten Beispiel wird das | Die Operation wird zuerst ausgeführt. Das Ergebnis wird dann als Operand rechts von & übergeben.

  3. 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.

Autor: Jesse John
Jesse John avatar Jesse John avatar

Jesse is passionate about data analysis and visualization. He uses the R statistical programming language for all aspects of his work.