Buscar cadenas
Parte de la sección Lógica y flujo del Journey de R de Coddy. Lección 4 de 64.
grepl(pattern, x) devuelve TRUE por cada elemento de x que contiene pattern. Añade fixed = TRUE para buscar los caracteres exactos. Sin esta opción, el patrón es una expresión regular, en la que caracteres como . y ? tienen significados especiales.
files <- c("report.csv", "photo.png", "data.csv")
print(grepl(".csv", files, fixed = TRUE))
print(files[grepl(".csv", files, fixed = TRUE)])Salida:
[1] TRUE FALSE TRUE
[1] "report.csv" "data.csv" startsWith(x, prefix) y endsWith(x, suffix) comprueban solo el principio o el final de cada cadena. Todas estas búsquedas distinguen entre mayúsculas y minúsculas, así que convierte primero con tolower() para ignorar las mayúsculas y minúsculas.
names <- c("Anna", "bob", "Andre")
print(startsWith(names, "An"))
print(startsWith(tolower(names), "b"))Salida:
[1] TRUE FALSE TRUE
[1] FALSE TRUE FALSELos resultados son vectores lógicos, por lo que sum() cuenta las coincidencias y any() comprueba si hay al menos una:
emails <- c("a@x.com", "bad-address", "c@y.org")
valid <- grepl("@", emails, fixed = TRUE)
print(sum(valid))
print(any(!valid))Salida:
[1] 2
[1] TRUEgrep(pattern, x) devuelve las posiciones de los elementos coincidentes, y grep(pattern, x, value = TRUE) devuelve los elementos mismos:
files <- c("a.csv", "b.txt", "c.csv")
print(grep(".csv", files, fixed = TRUE))
print(grep(".csv", files, fixed = TRUE, value = TRUE))Salida:
[1] 1 3
[1] "a.csv" "c.csv"Desafío
FácilCompleta count_domain(emails, domain). Devuelve cuántas direcciones de emails terminan con @ seguido de domain. Ignora las mayúsculas y minúsculas: CY@CODDY.TECH cuenta para el dominio coddy.tech.
El código proporcionado lee las direcciones como una línea separada por comas, después el dominio, e imprime el número devuelto.
Pruébalo tú mismo
count_domain <- function(emails, domain) {
# Escribe tu código aquí
0
}
# Código de entrada/salida suministrado: mantenlo tal como está
input <- suppressWarnings(readLines(file("stdin")))
emails <- strsplit(input[1], ",")[[1]]
cat(count_domain(emails, input[2]), sep = "\n")
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y flujo
1Cadenas a fondo
Subcadenas con substr()Formateo con sprintf()Dividir y unirBuscar cadenasReemplazar textoRepaso - Constructor de nombres de usuario4Matrices
Creación de matricesIndexación de matricesResúmenes de filas y columnasAritmética de matricesRepaso: tabla de asientos2Búsquedas clave-valor
Búsquedas en vectores con nombreComprobar clavesAñadir y eliminar clavesRecorrer nombresRepaso: panel bursátil5Proyecto - Libro de calificaciones
Añadir estudiantesRegistrar calificaciones3Conjuntos y conteo
Valores únicosOperaciones con conjuntosPruebas de pertenenciaConteo con table()Repaso: invitados al evento6Funciones como valores
Funciones anónimasPasar funcionesDevolver funcionesClausuras con estadoRepaso: reglas de descuento9Marcos de datos
Creación de marcos de datosColumnas y filasFiltrado de filasAdición y ordenaciónRepaso - Informe de ventas12Proyecto: Rastreador de gastos
Registro de gastosGasto totalPractica por tu cuenta: Compilador de R online