Wyszukiwanie w łańcuchach znaków
Część sekcji Logika i przepływ sterowania ścieżki R w Coddy. Lekcja 4 z 64.
grepl(pattern, x) zwraca TRUE dla każdego elementu x, który zawiera pattern. Dodaj fixed = TRUE, aby wyszukiwać dokładne znaki. Bez tego wzorzec jest wyrażeniem regularnym, w którym znaki takie jak . i ? mają specjalne znaczenie.
files <- c("report.csv", "photo.png", "data.csv")
print(grepl(".csv", files, fixed = TRUE))
print(files[grepl(".csv", files, fixed = TRUE)])Wynik:
[1] TRUE FALSE TRUE
[1] "report.csv" "data.csv" startsWith(x, prefix) i endsWith(x, suffix) sprawdzają tylko początek lub koniec każdego ciągu znaków. Wszystkie te wyszukiwania uwzględniają wielkość liter, więc aby ją zignorować, najpierw użyj tolower().
names <- c("Anna", "bob", "Andre")
print(startsWith(names, "An"))
print(startsWith(tolower(names), "b"))Wynik:
[1] TRUE FALSE TRUE
[1] FALSE TRUE FALSEWyniki to wektory logiczne, więc sum() zlicza dopasowania, a any() sprawdza, czy jest co najmniej jedno:
emails <- c("a@x.com", "bad-address", "c@y.org")
valid <- grepl("@", emails, fixed = TRUE)
print(sum(valid))
print(any(!valid))Wynik:
[1] 2
[1] TRUEgrep(pattern, x) zwraca pozycje pasujących elementów, a grep(pattern, x, value = TRUE) same elementy:
files <- c("a.csv", "b.txt", "c.csv")
print(grep(".csv", files, fixed = TRUE))
print(grep(".csv", files, fixed = TRUE, value = TRUE))Wynik:
[1] 1 3
[1] "a.csv" "c.csv"Wyzwanie
ŁatwyUzupełnij count_domain(emails, domain). Zwróć liczbę adresów w emails, które kończą się na @, po którym następuje domain. Ignoruj wielkość liter: CY@CODDY.TECH jest zaliczany do domeny coddy.tech.
Podany kod odczytuje adresy z wiersza rozdzielonego przecinkami, następnie domenę i wypisuje zwróconą liczbę.
Spróbuj swoich sił
count_domain <- function(emails, domain) {
# Wpisz tutaj swój kod
0
}
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
input <- suppressWarnings(readLines(file("stdin")))
emails <- strsplit(input[1], ",")[[1]]
cat(count_domain(emails, input[2]), sep = "\n")
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ sterowania
1Łańcuchy znaków w szczegółach
Podciągi za pomocą substr()Formatowanie za pomocą sprintf()Dzielenie i łączenieWyszukiwanie w łańcuchach znakówZastępowanie tekstuPowtórka – kreator nazwy użytkownika4Macierze
Tworzenie macierzyIndeksowanie macierzyPodsumowania wierszy i kolumnDziałania na macierzachPowtórka – plan miejsc10Zaawansowane sterowanie przepływem
Funkcja switch()Wektorowe ifelse()repeat i breakFunkcje rekurencyjnePodsumowanie — klasyfikator ocen2Wyszukiwanie wartości po kluczach
Wyszukiwanie nazwanych elementów wektoraSprawdzanie kluczyDodawanie i usuwanie kluczyIterowanie po nazwachPowtórzenie — giełda5Projekt — dziennik ocen
Dodawanie uczniówZapisywanie ocen3Zbiory i zliczanie
Unikalne wartościOperacje na zbiorachTesty przynależnościZliczanie za pomocą table()Podsumowanie — goście wydarzenia6Funkcje jako wartości
Funkcje anonimowePrzekazywanie funkcjiZwracanie funkcjiDomknięcia ze stanemPowtórka — reguły rabatowe9Ramki danych
Tworzenie ramek danychKolumny i wierszeFiltrowanie wierszyDodawanie i sortowaniePodsumowanie – raport sprzedaży12Projekt – śledzenie wydatków
Rejestrowanie wydatkówŁączne wydatkiPoćwicz samodzielnie: Kompilator R online