Menu
Coddy logo textTech

Добавление и сортировка

Часть раздела Логика и потоки выполнения путешествия по R на Coddy. Урок 45 из 64.

Присваивание новому имени столбца добавляет столбец. Арифметические операции между столбцами выполняются построчно, как и любые векторные арифметические операции:

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)

Результат:

  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), ] сортирует строки по столбцу. Номера строк слева остаются привязанными к исходным строкам. Используйте знак минус или decreasing = TRUE для сортировки от большего к меньшему, а при совпадениях — второй ключ:

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

Результат:

  item total
2  jam  12.5
3  oil   9.0
1  tea   8.0

Новый столбец может быть текстом, составленным из других столбцов. sprintf() работает сразу со всеми столбцами:

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)

Результат:

[1] "2 x tea" "5 x jam"

rbind() добавляет строку из однострочного датафрейма с теми же столбцами, а head(df, n) оставляет первые n строк:

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

Результат:

[1] 3
  item qty
2  jam   5
1  tea   2
challenge icon

Задание

Легко

Завершите order_totals(df). В df есть столбцы item, qty и price. Добавьте столбец total (количество, умноженное на цену), отсортируйте строки по убыванию итоговой суммы (элементы с одинаковыми итоговыми суммами — в алфавитном порядке) и верните по одной строке на каждую строку таблицы в формате jam: 12.50, округляя итоговую сумму до двух десятичных знаков.

Предоставленный код считывает таблицу из входных данных с помощью read.csv(text = input): первая строка содержит имена столбцов, а каждая последующая строка — одну строку таблицы со значениями, разделёнными запятыми. Код выводит каждую возвращённую строку.

Попробуйте сами

order_totals <- function(df) {
  # Напишите ваш код здесь
  character(0)
}

# Предоставленный код ввода/вывода: оставьте его как есть
input <- suppressWarnings(readLines(file("stdin")))
df <- read.csv(text = input)
cat(order_totals(df), sep = "\n")
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и потоки выполнения

Потренируйтесь самостоятельно: Онлайн-компилятор R