Ordenando por uma Chave
Parte da seção Lógica e Fluxo do Journey de R da Coddy. Lição 38 de 64.
order(x) retorna as posições que ordenariam x: primeiro a posição do menor valor, depois a próxima, e assim por diante. Use outro vetor como índice com ele para ordenar esse vetor por x:
names <- c("cy", "ada", "bo")
ages <- c(41, 36, 22)
print(order(ages))
print(names[order(ages)])Saída:
[1] 3 2 1
[1] "bo" "ada" "cy" Para ordenar em ordem decrescente, passe decreasing = TRUE ou coloque um sinal de menos antes de uma chave numérica:
names <- c("cy", "ada", "bo")
scores <- c(80, 95, 80)
print(names[order(scores, decreasing = TRUE)])
print(names[order(-scores)])Saída:
[1] "ada" "cy" "bo"
[1] "ada" "cy" "bo" Dê a order() uma segunda chave para desempatar. Aqui, as pontuações são ordenadas da maior para a menor, e as pontuações iguais são ordenadas pelo nome:
names <- c("cy", "ada", "bo")
scores <- c(80, 95, 80)
print(names[order(-scores, names)])Saída:
[1] "ada" "bo" "cy" order() mantém os valores empatados em sua ordem original quando nenhuma segunda chave é fornecida. As mesmas posições podem reordenar vários vetores que pertencem juntos:
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])Saída:
[1] "jam" "tea" "oil"
[1] 6 1 3Desafio
FácilComplete ranking(names, scores). Retorne uma linha por jogador, 1. ada 95, da maior pontuação para a menor. Jogadores com a mesma pontuação são listados em ordem alfabética.
O código fornecido lê os jogadores como pares name:score separados por vírgulas e imprime cada linha retornada.
Experimente você mesmo
ranking <- function(names, scores) {
# Escreva seu código aqui
character(0)
}
# Código de entrada/saída fornecido: mantenha-o 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 lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica e Fluxo
1Strings em Profundidade
Substrings com substr()Formatação com sprintf()Dividindo e UnindoPesquisando StringsSubstituindo TextoRecapitulação - Criador de Nome de Usuário4Matrizes
Criando MatrizesIndexando MatrizesResumos de Linhas e ColunasAritmética de MatrizesRecapitulação - Tabela de Assentos10Fluxo de Controle Avançado
A Função switch()ifelse() Vetorizadorepeat e breakFunções RecursivasRevisão — Classificador de Notas2Consultas de Chave-Valor
Consultas em Vetores NomeadosVerificando ChavesAdicionando e Removendo ChavesPercorrendo NomesRecapitulação - Mesa de Ações5Projeto - Boletim de Notas
Adicionando AlunosRegistrando Notas8Ordenação e Agrupamento
Ordenando VetoresOrdenando por uma ChaveAgrupando com split()Resumos de GruposRecapitulação - Tabela de Classificação3Conjuntos e Contagem
Valores ÚnicosOperações com ConjuntosTestes de PertinênciaContagem com table()Recapitulação - Convidados do Evento6Funções como Valores
Funções AnônimasPassando FunçõesRetornando FunçõesClosures com EstadoRecapitulação - Regras de Desconto9Data Frames
Criando Data FramesColunas e LinhasFiltrando LinhasAdicionando e OrdenandoRecapitulação - Relatório de Vendas12Projeto - Rastreador de Despesas
Registro de DespesasGastos TotaisPratique por conta própria: Compilador de R online