Menu
Coddy logo textTech

追加と並べ替え

CoddyのRジャーニー「ロジックとフロー」セクションの一部。レッスン 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を使用し、同値の場合は2番目のキーを指定します。

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()は同じ列を持つ1行のデータフレームから行を追加し、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の形式で1行を返し、合計は小数点以下2桁にしてください。

提供されたコードは、read.csv(text = input)を使って入力から表を読み込みます。1行目には列名が入り、その後の各行が1行分のデータで、値はカンマで区切られています。コードは返された各行を出力します。

自分で試してみよう

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オンラインコンパイラ