Ricerca nelle stringhe
Fa parte della sezione Logica e flusso del percorso R di Coddy. Lezione 4 di 64.
grepl(pattern, x) restituisce TRUE per ogni elemento di x che contiene pattern. Aggiungi fixed = TRUE per cercare i caratteri esatti. Senza, il pattern è un'espressione regolare, in cui caratteri come . e ? hanno significati speciali.
files <- c("report.csv", "photo.png", "data.csv")
print(grepl(".csv", files, fixed = TRUE))
print(files[grepl(".csv", files, fixed = TRUE)])Output:
[1] TRUE FALSE TRUE
[1] "report.csv" "data.csv" startsWith(x, prefix) e endsWith(x, suffix) controllano solo l’inizio o la fine di ogni stringa. Tutte queste ricerche distinguono tra maiuscole e minuscole, quindi converti prima con tolower() per ignorare la differenza tra maiuscole e minuscole.
names <- c("Anna", "bob", "Andre")
print(startsWith(names, "An"))
print(startsWith(tolower(names), "b"))Output:
[1] TRUE FALSE TRUE
[1] FALSE TRUE FALSEI risultati sono vettori logici, quindi sum() conta le corrispondenze e any() verifica che ce ne sia almeno una:
emails <- c("a@x.com", "bad-address", "c@y.org")
valid <- grepl("@", emails, fixed = TRUE)
print(sum(valid))
print(any(!valid))Output:
[1] 2
[1] TRUEgrep(pattern, x) restituisce le posizioni degli elementi corrispondenti e grep(pattern, x, value = TRUE) gli elementi stessi:
files <- c("a.csv", "b.txt", "c.csv")
print(grep(".csv", files, fixed = TRUE))
print(grep(".csv", files, fixed = TRUE, value = TRUE))Output:
[1] 1 3
[1] "a.csv" "c.csv"Sfida
FacileCompleta count_domain(emails, domain). Restituisci quante email in emails terminano con @ seguito da domain. Ignora le maiuscole e le minuscole: CY@CODDY.TECH viene conteggiato per il dominio coddy.tech.
Il codice fornito legge gli indirizzi da una riga separata da virgole, poi il dominio, e stampa il numero restituito.
Provalo tu
count_domain <- function(emails, domain) {
# Write your code here
0
}
# Supplied input/output code: keep it as it is
input <- suppressWarnings(readLines(file("stdin")))
emails <- strsplit(input[1], ",")[[1]]
cat(count_domain(emails, input[2]), sep = "\n")
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Le stringhe in dettaglio
Sottostringhe con substr()Formattazione con sprintf()Dividere e unireRicerca nelle stringheSostituzione del testoRipasso - Generatore di nomi utente4Matrici
Creazione di matriciIndicizzazione delle matriciRiepiloghi di righe e colonneOperazioni aritmetiche con le matriciRipasso - Schema dei posti a sedere10Flusso di controllo avanzato
La funzione switch()ifelse() vettorialerepeat e breakFunzioni ricorsiveRiepilogo - Classificatore di voti2Ricerche chiave-valore
Ricerche in vettori con nomiControllare le chiaviAggiungere e rimuovere chiaviIterare sui nomiRiepilogo - Sportello titoli5Progetto - Registro dei voti
Aggiungere studentiRegistrare i voti8Ordinamento e raggruppamento
Ordinare i vettoriOrdinare in base a una chiaveRaggruppare con split()Riepiloghi dei gruppiRipasso - Classifica3Insiemi e conteggio
Valori univociOperazioni sugli insiemiTest di appartenenzaConteggio con table()Riepilogo - Ospiti dell’evento6Le funzioni come valori
Funzioni anonimePassare funzioniRestituire funzioniClosure con statoRiepilogo - Regole di sconto9DataFrame
Creare DataFrameColonne e righeFiltrare le righeAggiungere e ordinareRiepilogo - Report delle vendite12Progetto - Gestione delle spese
Registrare le speseSpesa totaleEsercitati da solo: Compilatore R online