Operaciones con conjuntos
Parte de la sección Lógica y flujo del Journey de R de Coddy. Lección 13 de 64.
Tres funciones combinan dos vectores como conjuntos. Cada una devuelve valores sin repeticiones:
union(a, b) contiene los valores de cualquiera de los dos vectores, intersect(a, b) los valores de ambos, y setdiff(a, b) los valores de a que no están en b.
mon <- c("ana", "ben", "cy")
tue <- c("ben", "dee", "cy", "ben")
print(union(mon, tue))
print(intersect(mon, tue))
print(setdiff(mon, tue))Salida:
[1] "ana" "ben" "cy" "dee"
[1] "ben" "cy"
[1] "ana"setdiff() depende del orden de sus argumentos. Intercámbialos para obtener los valores que solo están en el segundo vector:
mon <- c("ana", "ben", "cy")
tue <- c("ben", "dee", "cy")
print(setdiff(tue, mon))Salida:
[1] "dee"Cuando no queda nada, el resultado es un vector vacío, character(0) para texto:
print(intersect(c("a", "b"), c("x", "y")))Salida:
character(0)Los resultados mantienen el orden del primer vector. Ordénalos cuando la salida necesite un orden predecible y comprueba si el resultado está vacío antes de unirlo:
a <- c("pear", "fig", "kiwi")
b <- c("kiwi", "pear")
both <- sort(intersect(a, b))
print(paste(both, collapse = ", "))
print(length(setdiff(b, a)) == 0)Salida:
[1] "kiwi, pear"
[1] TRUEDesafío
FácilCompleta compare_courses(a, b). a y b son los estudiantes de dos cursos. Devuelve tres líneas:
Both:seguido de los estudiantes de ambos cursosOnly first:seguido de los estudiantes que solo están enaTotal:seguido del número de estudiantes diferentes entre ambos cursos
Ordena los nombres de cada lista y únelos con , . Una lista vacía se escribe como none.
El código proporcionado lee los dos cursos como líneas separadas por comas e imprime cada línea devuelta.
Pruébalo tú mismo
compare_courses <- function(a, b) {
# Escribe tu código aquí
c("Both: ", "Only first: ", "Total: 0")
}
# Código de entrada/salida suministrado: déjalo como está
input <- suppressWarnings(readLines(file("stdin")))
cat(compare_courses(strsplit(input[1], ",")[[1]], strsplit(input[2], ",")[[1]]), 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