Pesquisando Strings
Parte da seção Lógica e Fluxo do Journey de R da Coddy. Lição 4 de 64.
grepl(pattern, x) retorna TRUE para cada elemento de x que contém pattern. Adicione fixed = TRUE para procurar pelos caracteres exatos. Sem isso, o padrão é uma expressão regular, na qual caracteres como . e ? têm significados especiais.
files <- c("report.csv", "photo.png", "data.csv")
print(grepl(".csv", files, fixed = TRUE))
print(files[grepl(".csv", files, fixed = TRUE)])Saída:
[1] TRUE FALSE TRUE
[1] "report.csv" "data.csv" startsWith(x, prefix) e endsWith(x, suffix) verificam apenas o início ou o fim de cada string. Todas essas buscas diferenciam maiúsculas de minúsculas, portanto, converta primeiro com tolower() para ignorar maiúsculas e minúsculas.
names <- c("Anna", "bob", "Andre")
print(startsWith(names, "An"))
print(startsWith(tolower(names), "b"))Saída:
[1] TRUE FALSE TRUE
[1] FALSE TRUE FALSEOs resultados são vetores lógicos, então sum() conta as correspondências e any() verifica se há pelo menos uma:
emails <- c("a@x.com", "bad-address", "c@y.org")
valid <- grepl("@", emails, fixed = TRUE)
print(sum(valid))
print(any(!valid))Saída:
[1] 2
[1] TRUEgrep(pattern, x) retorna as posições dos elementos correspondentes, e grep(pattern, x, value = TRUE) retorna os próprios elementos:
files <- c("a.csv", "b.txt", "c.csv")
print(grep(".csv", files, fixed = TRUE))
print(grep(".csv", files, fixed = TRUE, value = TRUE))Saída:
[1] 1 3
[1] "a.csv" "c.csv"Desafio
FácilComplete count_domain(emails, domain). Retorne quantos endereços em emails terminam com @ seguido por domain. Ignore maiúsculas e minúsculas: CY@CODDY.TECH conta para o domínio coddy.tech.
O código fornecido lê os endereços como uma linha separada por vírgulas, depois o domínio, e imprime o número retornado.
Experimente você mesmo
count_domain <- function(emails, domain) {
# Escreva seu código aqui
0
}
# Código de entrada/saída fornecido: mantenha-o como está
input <- suppressWarnings(readLines(file("stdin")))
emails <- strsplit(input[1], ",")[[1]]
cat(count_domain(emails, input[2]), sep = "\n")
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica e Fluxo
1Strings em Profundidade
Substrings com substr()Formatação com sprintf()Dividindo e UnindoPesquisando StringsSubstituindo TextoRecapitulação - Criador de Nome de Usuário4Matrizes
Criando MatrizesIndexando MatrizesResumos de Linhas e ColunasAritmética de MatrizesRecapitulação - Tabela de Assentos10Fluxo de Controle Avançado
A Função switch()ifelse() Vetorizadorepeat e breakFunções RecursivasRevisão — Classificador de Notas2Consultas de Chave-Valor
Consultas em Vetores NomeadosVerificando ChavesAdicionando e Removendo ChavesPercorrendo NomesRecapitulação - Mesa de Ações5Projeto - Boletim de Notas
Adicionando AlunosRegistrando Notas3Conjuntos e Contagem
Valores ÚnicosOperações com ConjuntosTestes de PertinênciaContagem com table()Recapitulação - Convidados do Evento6Funções como Valores
Funções AnônimasPassando FunçõesRetornando FunçõesClosures com EstadoRecapitulação - Regras de Desconto9Data Frames
Criando Data FramesColunas e LinhasFiltrando LinhasAdicionando e OrdenandoRecapitulação - Relatório de Vendas12Projeto - Rastreador de Despesas
Registro de DespesasGastos TotaisPratique por conta própria: Compilador de R online