Resúmenes de filas y columnas
Parte de la sección Lógica y flujo del Journey de R de Coddy. Lección 19 de 64.
rowSums() y rowMeans() devuelven un resultado por fila; colSums() y colMeans(), uno por columna. Aquí, cada fila es un estudiante y cada columna, una prueba:
scores <- matrix(c(80, 90, 70, 60, 75, 85), nrow = 2, byrow = TRUE)
print(rowMeans(scores))
print(colSums(scores))Salida:
[1] 80.00000 73.33333
[1] 140 165 155Para cualquier otro resumen, apply(m, 1, f) llama a f en cada fila y apply(m, 2, f) en cada columna:
scores <- matrix(c(80, 90, 70, 60, 75, 85), nrow = 2, byrow = TRUE)
print(apply(scores, 1, max))
print(apply(scores, 2, min))Salida:
[1] 90 85
[1] 60 75 70Combina un resumen con which.max() para encontrar qué fila o columna gana:
scores <- matrix(c(80, 90, 70, 60, 75, 85), nrow = 2, byrow = TRUE)
best_test <- which.max(colMeans(scores))
print(best_test)
print(round(rowMeans(scores), 1))Salida:
[1] 2
[1] 80.0 73.3apply() también acepta una función que escribas en el momento con function(r). Aquí cuenta los valores superiores a 5 en cada fila:
m <- matrix(c(3, 8, 1, 9, 2, 7), nrow = 2, byrow = TRUE)
print(apply(m, 1, function(r) sum(r > 5)))Salida:
[1] 1 2Desafío
FácilCompleta class_report(scores). Cada fila de scores corresponde a un estudiante y cada columna, a una prueba. Devuelve una línea por estudiante, Student 1: 81.7, con la media del estudiante redondeada a un decimal. Añade una última línea Best test: seguida del número de la columna con la media más alta.
El código proporcionado lee una matriz desde una línea: las filas están separadas por ; y los valores de una fila, por ,, por lo que 1,2;3,4 es una matriz con las filas 1 2 y 3 4. El código imprime cada línea devuelta.
Pruébalo tú mismo
class_report <- function(scores) {
# Escribe tu código aquí
character(0)
}
# Código de entrada/salida suministrado: mantenlo tal como está
input <- suppressWarnings(readLines(file("stdin")))
parse_matrix <- function(line) {
rows <- strsplit(line, ";")[[1]]
matrix(as.numeric(unlist(strsplit(rows, ","))), nrow = length(rows), byrow = TRUE)
}
cat(class_report(parse_matrix(input[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