ベクトルの並べ替え
CoddyのRジャーニー「ロジックとフロー」セクションの一部。レッスン 37/64。
sort(x)はxの値を昇順で返し、decreasing = TRUEにすると降順になります。元のベクトルは変更されません:
scores <- c(72, 95, 60, 88)
print(sort(scores))
print(sort(scores, decreasing = TRUE))
print(scores)出力:
[1] 60 72 88 95
[1] 95 88 72 60
[1] 72 95 60 88テキストはアルファベット順に並べ替えられます。正確な順序はシステムの言語設定によって異なります。Coddyでは、多くのサーバーと同様に、大文字が小文字より先に来るため、"Zed"は"ada"より前に並べ替えられます。大文字と小文字を区別しない場合は、tolower()で変換します:
names <- c("cy", "Zed", "ada")
print(sort(names))
print(sort(tolower(names)))出力:
[1] "Zed" "ada" "cy"
[1] "ada" "cy" "zed"rev(x) はソートせずに現在の順序を逆にし、head(x, n) は最初の n 個の要素を保持します。これらを sort() と組み合わせると、上位リストを作成できます。
scores <- c(72, 95, 60, 88)
print(rev(scores))
print(head(sort(scores, decreasing = TRUE), 2))出力:
[1] 88 60 95 72
[1] 95 88ソートされた名前付きベクトルでは、それぞれの名前が値とともに保持されるため、名前は値の順序で並びます:
stock <- c(tea = 12, jam = 3, oil = 7)
low_first <- sort(stock)
print(names(low_first))
print(low_first[["jam"]])出力:
[1] "jam" "oil" "tea"
[1] 3チャレンジ
簡単top_scores(scores, n)を完成させてください。n個の最高得点を高い順に返し、, で連結します。得点がn個未満の場合は、すべて返してください。
提供されたコードは、得点をカンマ区切りの1行とnとして読み取り、返された値を出力します。
自分で試してみよう
top_scores <- function(scores, n) {
# ここにコードを書いてください
""
}
# 提供された入出力コード:そのままにしておいてください
input <- suppressWarnings(readLines(file("stdin")))
cat(top_scores(as.numeric(strsplit(input[1], ",")[[1]]), as.numeric(input[2])), sep = "\n")
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: Rオンラインコンパイラ