Strings durchsuchen
Teil des Abschnitts Logik und Ablaufsteuerung der R-Journey von Coddy. Lektion 4 von 64.
grepl(pattern, x) gibt für jedes Element von x, das pattern enthält, TRUE zurück. Füge fixed = TRUE hinzu, um nach den exakten Zeichen zu suchen. Ohne diese Angabe ist das Muster ein regulärer Ausdruck, in dem Zeichen wie . und ? besondere Bedeutungen haben.
files <- c("report.csv", "photo.png", "data.csv")
print(grepl(".csv", files, fixed = TRUE))
print(files[grepl(".csv", files, fixed = TRUE)])Ausgabe:
[1] TRUE FALSE TRUE
[1] "report.csv" "data.csv" startsWith(x, prefix) und endsWith(x, suffix) prüfen nur den Anfang oder das Ende jeder Zeichenkette. Alle diese Suchen unterscheiden zwischen Groß- und Kleinschreibung. Verwende daher zuerst tolower(), um die Groß- und Kleinschreibung zu ignorieren.
names <- c("Anna", "bob", "Andre")
print(startsWith(names, "An"))
print(startsWith(tolower(names), "b"))Ausgabe:
[1] TRUE FALSE TRUE
[1] FALSE TRUE FALSEDie Ergebnisse sind logische Vektoren, daher zählt sum() die Übereinstimmungen und any() prüft, ob mindestens eine vorhanden ist:
emails <- c("a@x.com", "bad-address", "c@y.org")
valid <- grepl("@", emails, fixed = TRUE)
print(sum(valid))
print(any(!valid))Ausgabe:
[1] 2
[1] TRUEgrep(pattern, x) gibt die Positionen der übereinstimmenden Elemente zurück, und grep(pattern, x, value = TRUE) die Elemente selbst:
files <- c("a.csv", "b.txt", "c.csv")
print(grep(".csv", files, fixed = TRUE))
print(grep(".csv", files, fixed = TRUE, value = TRUE))Ausgabe:
[1] 1 3
[1] "a.csv" "c.csv"Aufgabe
EinfachVervollständige count_domain(emails, domain). Gib zurück, wie viele Adressen in emails mit @ gefolgt von domain enden. Ignoriere die Groß- und Kleinschreibung: CY@CODDY.TECH zählt für die Domain coddy.tech.
Der bereitgestellte Code liest die Adressen als durch Kommas getrennte Zeile und anschließend die Domain ein und gibt die zurückgegebene Zahl aus.
Probier es selbst
count_domain <- function(emails, domain) {
# Schreibe deinen Code hier
0
}
# Mitgelieferter Ein-/Ausgabe-Code: belasse ihn unverändert
input <- suppressWarnings(readLines(file("stdin")))
emails <- strsplit(input[1], ",")[[1]]
cat(count_domain(emails, input[2]), sep = "\n")
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik und Ablaufsteuerung
1Strings im Detail
Teilstrings mit substr()Formatierung mit sprintf()Aufteilen und VerbindenStrings durchsuchenText ersetzenWiederholung – Benutzernamen-Generator4Matrizen
Matrizen erstellenMatrizen indizierenZusammenfassungen von Zeilen und SpaltenMatrizenarithmetikRückblick – Sitzplan10Fortgeschrittener Kontrollfluss
Die switch()-FunktionVektorisierter ifelse()repeat und breakRekursive FunktionenRückblick – Notenklassifizierung2Schlüssel-Wert-Suchen
Benannte Vektor-SuchenSchlüssel prüfenSchlüssel hinzufügen und entfernenNamen durchlaufenRückblick – Aktienübersicht5Projekt – Notenbuch
Schüler hinzufügenNoten eintragen3Mengen und Zählen
Eindeutige WerteMengenoperationenZugehörigkeitstestsZählen mit table()Rückblick – Gäste einer Veranstaltung6Funktionen als Werte
Anonyme FunktionenFunktionen übergebenFunktionen zurückgebenClosures mit ZustandRückblick – Rabattregeln9Datenrahmen
Datenrahmen erstellenSpalten und ZeilenZeilen filternHinzufügen und SortierenZusammenfassung – Verkaufsbericht12Projekt – Ausgaben-Tracker
Ausgaben erfassenGesamtausgabenÜbe selbstständig: Online-R-Compiler