Menu
Coddy logo textTech

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.0

df[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.0

Uma 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   2
challenge icon

Desafio

Fácil

Complete 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")
quiz iconTeste seus conhecimentos

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

Pratique por conta própria: Compilador de R online