Agrupar con split()
Parte de la sección Lógica y flujo del Journey de R de Coddy. Lección 39 de 64.
split(values, groups) coloca cada valor en el grupo nombrado por el elemento correspondiente de groups. El resultado es una lista con un elemento por grupo, nombrada según los grupos en orden alfabético:
amounts <- c(10, 20, 30, 40)
category <- c("food", "rent", "food", "fun")
by_cat <- split(amounts, category)
print(names(by_cat))
print(by_cat[["food"]])Salida:
[1] "food" "fun" "rent"
[1] 10 30Combina split() con sapply() para calcular un resumen por cada grupo:
amounts <- c(10, 20, 30, 40)
category <- c("food", "rent", "food", "fun")
by_cat <- split(amounts, category)
print(sapply(by_cat, sum))
print(sapply(by_cat, length))Salida:
food fun rent
40 40 20
food fun rent
2 1 1 Los valores también pueden ser texto, por ejemplo, para agrupar nombres por su primera letra:
names <- c("ana", "bo", "al", "bea", "cy")
groups <- split(names, substr(names, 1, 1))
for (letter in names(groups)) {
cat(letter, ":", paste(groups[[letter]], collapse = ", "), "\n")
}Salida:
a : ana, al
b : bo, bea
c : cy Un grupo solo existe cuando al menos un valor le pertenece, así que comprueba con %in% names() antes de leer un grupo que podría estar vacío:
by_cat <- split(c(5, 7), c("food", "food"))
print("rent" %in% names(by_cat))Salida:
[1] FALSEDesafío
FácilCompleta category_totals(amounts, categories). Devuelve una línea por categoría en orden alfabético, food: 40 (2 items), con el importe total y el número de importes de esa categoría.
El código proporcionado lee los importes y las categorías como dos líneas separadas por comas de igual longitud e imprime cada línea devuelta.
Pruébalo tú mismo
category_totals <- function(amounts, categories) {
# Escribe tu código aquí
character(0)
}
# Código de entrada/salida suministrado: mantenlo tal como está
input <- suppressWarnings(readLines(file("stdin")))
cat(category_totals(as.numeric(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 calificaciones8Ordenación y agrupación
Ordenar vectoresOrdenar por una claveAgrupar con split()Resúmenes de gruposRepaso - Clasificación3Conjuntos 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