Menu
Coddy logo textTech

Logische Indizierung

Teil des Abschnitts Grundlagen der R-Journey von Coddy — Lektion 68 von 78.

Anstatt exakte Positionen anzugeben, können Sie einen logischen Vektor verwenden, um Elemente auszuwählen. Diese Technik, die als logische Indizierung bezeichnet wird, ermöglicht es Ihnen, einen Vektor basierend auf Bedingungen anstatt auf Positionen zu filtern.

Wenn Sie einen Vergleich auf einen Vektor anwenden, gibt R einen logischen Vektor derselben Länge zurück:

numbers <- c(10, 20, 30, 40, 50)
print(numbers > 25)

Ausgabe:

[1] FALSE FALSE  TRUE  TRUE  TRUE

Sie können diesen logischen Vektor direkt in eckigen Klammern verwenden, um übereinstimmende Elemente zu extrahieren:

numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers > 25])

Ausgabe:

[1] 30 40 50

R behält nur die Elemente, bei denen der logische Vektor TRUE ist. Dieser Ansatz ist viel sauberer als das Schreiben von Schleifen zum Filtern von Daten. Sie können Bedingungen mithilfe von logischen Operatoren kombinieren:

numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers >= 20 & numbers <= 40])

Ausgabe:

[1] 20 30 40

Logische Indizierung ist eine der leistungsfähigsten Funktionen von R für die Datenmanipulation, die es Ihnen ermöglicht, Datensätze mit einfachen, lesbaren Ausdrücken zu filtern.

challenge icon

Aufgabe

Einfach

Sie erhalten zwei Eingabezeilen:

  1. Eine durch Kommas getrennte Liste von Zahlen (z. B. 15,42,8,67,23,91,34,12,56)
  2. Zwei durch ein Komma getrennte Schwellenwerte, die einen Bereich darstellen (z. B. 20,60)

Verwenden Sie logische Indizierung, um:

  1. Einen numerischen Vektor aus den durch Kommas getrennten Zahlen zu erstellen
  2. Alle Elemente zu extrahieren und auszugeben, die kleiner als der erste Schwellenwert (untere Grenze) sind
  3. Alle Elemente zu extrahieren und auszugeben, die größer als der zweite Schwellenwert (obere Grenze) sind
  4. Alle Elemente zu extrahieren und auszugeben, die innerhalb des Bereichs liegen (größer als oder gleich dem ersten Schwellenwert UND kleiner als oder gleich dem zweiten Schwellenwert)

Wenn die Eingaben zum Beispiel wie folgt lauten:

5,25,10,45,60,15,80,35,50
20,50

Sollte die Ausgabe wie folgt aussehen:

[1]  5 10 15
[1] 60 80
[1] 25 45 35 50

Erklärung:

  • Elemente kleiner als 20: 5, 10, 15
  • Elemente größer als 50: 60, 80
  • Elemente zwischen 20 und 50 (einschließlich): 25, 45, 35, 50

Verwenden Sie den &-Operator, um Bedingungen für den Bereichsfilter zu kombinieren.

Spickzettel

Logische Indizierung ermöglicht es Ihnen, einen Vektor basierend auf Bedingungen anstatt auf Positionen zu filtern. Wenn Sie einen Vergleich auf einen Vektor anwenden, gibt R einen logischen Vektor zurück:

numbers <- c(10, 20, 30, 40, 50)
print(numbers > 25)
# Output: [1] FALSE FALSE  TRUE  TRUE  TRUE

Verwenden Sie den logischen Vektor innerhalb eckiger Klammern, um die passenden Elemente zu extrahieren:

numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers > 25])
# Output: [1] 30 40 50

Kombinieren Sie Bedingungen mit logischen Operatoren wie & (UND):

numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers >= 20 & numbers <= 40])
# Output: [1] 20 30 40

Probier es selbst

# Eingabe lesen
con <- file("stdin", "r")
numbers_input <- suppressWarnings(readLines(con, n = 1))
thresholds_input <- suppressWarnings(readLines(con, n = 1))
close(con)

# Die durch Kommas getrennten Zahlen in einen numerischen Vektor umwandeln
numbers <- as.numeric(unlist(strsplit(numbers_input, ",")))

# Die Schwellenwerte parsen
thresholds <- as.numeric(unlist(strsplit(thresholds_input, ",")))
lower_bound <- thresholds[1]
upper_bound <- thresholds[2]

# TODO: Schreiben Sie Ihren Code unten
# 1. Verwenden Sie logische Indizierung, um Elemente kleiner als lower_bound zu extrahieren und auszugeben
# 2. Verwenden Sie logische Indizierung, um Elemente größer als upper_bound zu extrahieren und auszugeben
# 3. Verwenden Sie logische Indizierung mit dem &-Operator, um Elemente innerhalb des Bereichs (inklusiv) zu extrahieren und auszugeben
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen