Der %in%-Operator
Teil des Abschnitts Grundlagen der R-Journey von Coddy — Lektion 70 von 78.
Manchmal müssen Sie prüfen, ob Werte in einem Vektor vorhanden sind. Der %in%-Operator bietet eine saubere Möglichkeit, auf Mitgliedschaft zu prüfen, wobei er TRUE für jedes übereinstimmende Element und ansonsten FALSE zurückgibt.
Die grundlegende Syntax prüft, ob Werte auf der linken Seite im Vektor auf der rechten Seite vorhanden sind:
fruits <- c("apple", "banana", "cherry")
print("banana" %in% fruits)Ausgabe:
[1] TRUESie können auch mehrere Werte gleichzeitig prüfen. Der Operator gibt einen logischen Vektor mit einem Ergebnis für jeden getesteten Wert zurück:
fruits <- c("apple", "banana", "cherry")
check <- c("banana", "grape", "apple")
print(check %in% fruits)Ausgabe:
[1] TRUE FALSE TRUEDies macht %in% perfekt zum Filtern. In Kombination mit logischer Indizierung können Sie Elemente extrahieren, die zu einer bestimmten Menge gehören:
numbers <- c(1, 5, 3, 8, 2, 9)
allowed <- c(1, 2, 3)
print(numbers[numbers %in% allowed])Ausgabe:
[1] 1 3 2Der %in%-Operator ist besonders nützlich bei der Validierung von Benutzereingaben oder beim Filtern von Daten basierend auf einer vordefinierten Liste akzeptabler Werte.
Aufgabe
EinfachSie erhalten drei Eingabezeilen:
- Eine durch Kommas getrennte Liste von Artikeln in Ihrem Inventar (z. B.
apple,banana,milk,bread,eggs,cheese) - Eine durch Kommas getrennte Liste von Artikeln auf Ihrer Einkaufsliste (z. B.
milk,butter,eggs,juice) - Eine durch Kommas getrennte Liste von Artikeln, die im Angebot sind (z. B.
bread,juice,yogurt)
Verwenden Sie den %in%-Operator, um:
- Charakter-Vektoren aus jeder durch Kommas getrennten Eingabe zu erstellen
- Zu prüfen, welche Artikel der Einkaufsliste Sie bereits in Ihrem Inventar haben, und das Ergebnis als logischen Vektor auszugeben
- Die Artikel der Einkaufsliste zu filtern und auszugeben, die Sie NICHT in Ihrem Inventar haben (Artikel, die Sie kaufen müssen)
- Die Artikel, die Sie kaufen müssen und die gleichzeitig im Angebot sind, zu filtern und auszugeben
Wenn die Eingaben beispielsweise wie folgt lauten:
apple,banana,milk,bread,eggs
milk,butter,eggs,juice,apple
bread,juice,yogurt,butterSollte die Ausgabe wie folgt aussehen:
[1] TRUE FALSE TRUE FALSE TRUE
[1] "butter" "juice"
[1] "butter" "juice"Erklärung:
- Einkaufsliste gegen Inventar geprüft: milk (TRUE), butter (FALSE), eggs (TRUE), juice (FALSE), apple (TRUE)
- Artikel NICHT im Inventar (müssen gekauft werden): butter, juice
- Zu kaufende Artikel, die im Angebot sind: butter und juice stehen beide auf der Angebotsliste
Verwenden Sie den !-Operator zusammen mit %in%, um Artikel zu finden, die NICHT in einem Vektor enthalten sind.
Spickzettel
Der Operator %in% prüft, ob Werte in einem Vektor vorhanden sind, und gibt TRUE oder FALSE zurück:
fruits <- c("apple", "banana", "cherry")
print("banana" %in% fruits)Ausgabe:
[1] TRUEPrüfen Sie mehrere Werte gleichzeitig, um einen logischen Vektor zu erhalten:
fruits <- c("apple", "banana", "cherry")
check <- c("banana", "grape", "apple")
print(check %in% fruits)Ausgabe:
[1] TRUE FALSE TRUEVerwenden Sie %in% mit logischer Indizierung, um Elemente zu filtern:
numbers <- c(1, 5, 3, 8, 2, 9)
allowed <- c(1, 2, 3)
print(numbers[numbers %in% allowed])Ausgabe:
[1] 1 3 2Verwenden Sie ! zusammen mit %in%, um Elemente zu finden, die NICHT in einem Vektor enthalten sind:
items <- c("milk", "butter", "eggs")
inventory <- c("milk", "eggs")
print(items[!items %in% inventory])Ausgabe:
[1] "butter"Probier es selbst
# Eingabe lesen
con <- file("stdin", "r")
inventory_input <- suppressWarnings(readLines(con, n = 1))
shopping_list_input <- suppressWarnings(readLines(con, n = 1))
sale_items_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# TODO: Schreiben Sie Ihren Code unten
# 1. Erstellen Sie Charakter-Vektoren aus jeder kommagetrennten Eingabe mit strsplit()
# 2. Überprüfen Sie, welche Artikel der Einkaufsliste Sie bereits im Inventar haben (verwenden Sie %in%)
# 3. Filtern Sie Artikel der Einkaufsliste, die Sie NICHT im Inventar haben (verwenden Sie ! mit %in%)
# 4. Filtern Sie Artikel, die Sie kaufen müssen und die auch im Angebot sindDiese 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