Menu
Coddy logo textTech

Ordinare in base a una chiave

Fa parte della sezione Logica e flusso del percorso R di Coddy. Lezione 38 di 64.

order(x) restituisce le posizioni che ordinerebbero x: prima la posizione del valore più piccolo, poi quella del successivo e così via. Usalo per indicizzare un altro vettore e ordinarlo in base a x:

names <- c("cy", "ada", "bo")
ages <- c(41, 36, 22)
print(order(ages))
print(names[order(ages)])

Output:

[1] 3 2 1
[1] "bo"  "ada" "cy" 

Per l'ordine decrescente, passa decreasing = TRUE oppure metti un segno meno davanti a una chiave numerica:

names <- c("cy", "ada", "bo")
scores <- c(80, 95, 80)
print(names[order(scores, decreasing = TRUE)])
print(names[order(-scores)])

Output:

[1] "ada" "cy"  "bo" 
[1] "ada" "cy"  "bo" 

Assegna a order() una seconda chiave per risolvere le parità. Qui i punteggi sono ordinati dal più alto al più basso e, a parità di punteggio, i nomi sono ordinati alfabeticamente:

names <- c("cy", "ada", "bo")
scores <- c(80, 95, 80)
print(names[order(-scores, names)])

Output:

[1] "ada" "bo"  "cy" 

order() mantiene i valori a pari merito nel loro ordine originale quando non viene fornita una seconda chiave. Le stesse posizioni possono riordinare diversi vettori correlati:

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])

Output:

[1] "jam" "tea" "oil"
[1] 6 1 3
challenge icon

Sfida

Facile

Completa ranking(names, scores). Restituisci una riga per ogni giocatore, 1. ada 95, dal punteggio più alto a quello più basso. I giocatori con lo stesso punteggio sono elencati in ordine alfabetico.

Il codice fornito legge i giocatori come coppie name:score separate da virgole e stampa ogni riga restituita.

Provalo tu

ranking <- function(names, scores) {
  # Escribe tu código aquí
  character(0)
}

# Código de entrada/salida proporcionado: déjalo tal 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")
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore R online