Ordenar por una clave
Parte de la sección Lógica y flujo del Journey de R de Coddy. Lección 38 de 64.
order(x) devuelve las posiciones que ordenarían x: primero la posición del valor más pequeño, después la siguiente, y así sucesivamente. Usa otro vector como índice con él para ordenar ese vector según x:
names <- c("cy", "ada", "bo")
ages <- c(41, 36, 22)
print(order(ages))
print(names[order(ages)])Salida:
[1] 3 2 1
[1] "bo" "ada" "cy" Para el orden descendente, pasa decreasing = TRUE o coloca un signo menos delante de una clave numérica:
names <- c("cy", "ada", "bo")
scores <- c(80, 95, 80)
print(names[order(scores, decreasing = TRUE)])
print(names[order(-scores)])Salida:
[1] "ada" "cy" "bo"
[1] "ada" "cy" "bo" Da a order() una segunda clave para desempatar. Aquí las puntuaciones se ordenan de mayor a menor y las puntuaciones iguales se ordenan por nombre:
names <- c("cy", "ada", "bo")
scores <- c(80, 95, 80)
print(names[order(-scores, names)])Salida:
[1] "ada" "bo" "cy" order() mantiene los valores empatados en su orden original cuando no se proporciona una segunda clave. Las mismas posiciones pueden reordenar varios vectores relacionados:
items <- c("tea", "jam", "oil")
price <- c(4, 2.5, 4)
qty <- c(1, 6, 3)
idx <- order(price)
print(items[idx])
print(qty[idx])Salida:
[1] "jam" "tea" "oil"
[1] 6 1 3Desafío
FácilCompleta ranking(names, scores). Devuelve una línea por jugador, 1. ada 95, desde la puntuación más alta hasta la más baja. Los jugadores con la misma puntuación aparecen en orden alfabético.
El código proporcionado lee los jugadores como pares name:score separados por comas e imprime cada línea devuelta.
Pruébalo tú mismo
ranking <- function(names, scores) {
# Escribe tu código aquí
character(0)
}
# Código de entrada/salida suministrado: déjalo como está
input <- suppressWarnings(readLines(file("stdin")))
pairs <- strsplit(strsplit(input[1], ",")[[1]], ":")
names <- sapply(pairs, function(p) p[1])
values <- as.numeric(sapply(pairs, function(p) p[2]))
cat(ranking(names, values), 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