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 TRUESie 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 50R 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 40Logische 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.
Aufgabe
EinfachSie erhalten zwei Eingabezeilen:
- Eine durch Kommas getrennte Liste von Zahlen (z. B.
15,42,8,67,23,91,34,12,56) - Zwei durch ein Komma getrennte Schwellenwerte, die einen Bereich darstellen (z. B.
20,60)
Verwenden Sie logische Indizierung, um:
- Einen numerischen Vektor aus den durch Kommas getrennten Zahlen zu erstellen
- Alle Elemente zu extrahieren und auszugeben, die kleiner als der erste Schwellenwert (untere Grenze) sind
- Alle Elemente zu extrahieren und auszugeben, die größer als der zweite Schwellenwert (obere Grenze) sind
- 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,50Sollte die Ausgabe wie folgt aussehen:
[1] 5 10 15
[1] 60 80
[1] 25 45 35 50Erklä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 TRUEVerwenden 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 50Kombinieren Sie Bedingungen mit logischen Operatoren wie & (UND):
numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers >= 20 & numbers <= 40])
# Output: [1] 20 30 40Probier 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 auszugebenDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
4Operatoren Teil 2
Logische Operatoren (AND, OR)Logische Operatoren Teil 2 (NOT)Wiederholung – Einfache LogikVektorisierte Logik Teil 1Vektorisierte Logik Teil 27Rechnungs-Split-Rechner
WillkommensnachrichtBenutzereingaben abfragen10FizzBuzz mit einer Besonderheit
SpielübersichtDie FizzBuzz-Funktion13Vektoren für Fortgeschrittene
Vektor-Slicing und IndizierungLogische IndizierungVektorarithmetik & RecyclingDer %in%-Operator2Variablen und Datentypen
Numerischer DatentypGanzzahl-DatentypZeichen-DatentypLogischer DatentypDatentypen prüfenBenennungskonventionenFehlende Werte: NAZusammenfassung – Variablenerstellung5Entscheidungsfindung
If-AnweisungIf - ElseWiederholung - Einfacher TaschenrechnerVerschachteltes If - Else8Schleifen
For-SchleifeWhile-SchleifeBreakNext (Continue)Rückblick - FakultätSequenzgenerierung (seq, :)Verschachtelte SchleifenRückblick - Dynamische Eingabe3Operatoren Teil 1
Arithmetische OperatorenGanzzahlige Division und ModuloZuweisungsoperatorenWiederholung - Einfache MathematikVergleichsoperatoren6Grundlagen der Ein- und Ausgabe
Print-AusgabeCat zur AusgabeAusgabe mit VariablenEingabe lesen mit readline()Grundlagen der TypumwandlungWiederholung – AltersrechnerWiederholung – Wahr oder Falsch9Funktionen
Funktionen deklarierenFunktionsargumenteRückgabewerteWiederholung - Sigma-FunktionWiederholung - ValidierungsfunktionStandard-Parameterwerte