Adicionando e Ordenando
Parte da seção Lógica e Fluxo do Journey de R da Coddy. Lição 45 de 64.
Atribuir a um novo nome de coluna adiciona a coluna. A aritmética entre colunas funciona linha por linha, como qualquer aritmética vetorial:
orders <- data.frame(item = c("tea", "jam", "oil"), qty = c(2, 5, 1), price = c(4, 2.5, 9))
orders$total <- orders$qty * orders$price
print(orders)Saída:
item qty price total
1 tea 2 4.0 8.0
2 jam 5 2.5 12.5
3 oil 1 9.0 9.0df[order(df$col), ] ordena as linhas por uma coluna. Os números das linhas à esquerda permanecem associados às linhas originais. Use um sinal de menos ou decreasing = TRUE para ordenar do maior para o menor, e uma segunda chave para empates:
orders <- data.frame(item = c("tea", "jam", "oil"), qty = c(2, 5, 1), price = c(4, 2.5, 9))
orders$total <- orders$qty * orders$price
print(orders[order(-orders$total, orders$item), c("item", "total")])Saída:
item total
2 jam 12.5
3 oil 9.0
1 tea 8.0Uma nova coluna pode ser um texto construído a partir de outras colunas. sprintf() funciona em colunas inteiras de uma só vez:
orders <- data.frame(item = c("tea", "jam"), qty = c(2, 5), price = c(4, 2.5))
orders$label <- sprintf("%d x %s", orders$qty, orders$item)
print(orders$label)Saída:
[1] "2 x tea" "5 x jam"rbind() adiciona uma linha de um data frame de uma linha com as mesmas colunas, e head(df, n) mantém as primeiras n linhas:
orders <- data.frame(item = c("tea", "jam"), qty = c(2, 5))
orders <- rbind(orders, data.frame(item = "oil", qty = 1))
print(nrow(orders))
print(head(orders[order(-orders$qty), ], 2))Saída:
[1] 3
item qty
2 jam 5
1 tea 2Desafio
FácilComplete order_totals(df). df tem as colunas item, qty e price. Adicione uma coluna total (quantidade vezes preço), ordene as linhas pelo total, do maior para o menor (itens com totais iguais em ordem alfabética) e retorne uma linha por linha, jam: 12.50, com o total com duas casas decimais.
O código fornecido lê a tabela da entrada com read.csv(text = input): a primeira linha contém os nomes das colunas e cada linha seguinte representa uma linha, com os valores separados por vírgulas. O código imprime cada linha retornada.
Experimente você mesmo
order_totals <- function(df) {
# Escreva seu código aqui
character(0)
}
# Código de entrada/saída fornecido: mantenha-o como está
input <- suppressWarnings(readLines(file("stdin")))
df <- read.csv(text = input)
cat(order_totals(df), 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 Notas3Conjuntos 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