Menu
Coddy logo textTech

行と列の集計

CoddyのRジャーニー「ロジックとフロー」セクションの一部。レッスン 19/64。

rowSums() と rowMeans() は各行につき1つの結果を返し、colSums() と colMeans() は各列につき1つの結果を返します。ここでは、各行が学生、各列がテストを表します:

scores <- matrix(c(80, 90, 70, 60, 75, 85), nrow = 2, byrow = TRUE)
print(rowMeans(scores))
print(colSums(scores))

出力:

[1] 80.00000 73.33333
[1] 140 165 155

その他の集計では、apply(m, 1, f) はすべての行に対して f を呼び出し、apply(m, 2, f) はすべての列に対して呼び出します。

scores <- matrix(c(80, 90, 70, 60, 75, 85), nrow = 2, byrow = TRUE)
print(apply(scores, 1, max))
print(apply(scores, 2, min))

出力:

[1] 90 85
[1] 60 75 70

要約をwhich.max()と組み合わせて、どの行または列が最も優れているかを見つけます:

scores <- matrix(c(80, 90, 70, 60, 75, 85), nrow = 2, byrow = TRUE)
best_test <- which.max(colMeans(scores))
print(best_test)
print(round(rowMeans(scores), 1))

出力:

[1] 2
[1] 80.0 73.3

apply()は、function(r)を使ってその場で作成した関数も受け取ります。ここでは、各行で5より大きい値を数えています。

m <- matrix(c(3, 8, 1, 9, 2, 7), nrow = 2, byrow = TRUE)
print(apply(m, 1, function(r) sum(r > 5)))

出力:

[1] 1 2
challenge icon

チャレンジ

簡単

class_report(scores)を完成させてください。scoresの各行は学生を、各列はテストを表します。学生ごとに1行ずつ、Student 1: 81.7の形式で返し、学生の平均を小数第1位に丸めてください。最後の行にBest test: を追加し、その後に平均が最も高い列の番号を続けてください。

提供されたコードは、1行から行列を読み取ります。行は;で区切り、行の値は,で区切るため、1,2;3,4は行1 2と3 4を持つ行列です。コードは返された各行を出力します。

自分で試してみよう

class_report <- function(scores) {
  # ここにコードを書いてください
  character(0)
}

# 提供された入出力コード:そのままにしておいてください
input <- suppressWarnings(readLines(file("stdin")))
parse_matrix <- function(line) {
  rows <- strsplit(line, ";")[[1]]
  matrix(as.numeric(unlist(strsplit(rows, ","))), nrow = length(rows), byrow = TRUE)
}
cat(class_report(parse_matrix(input[1])), sep = "\n")
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン

自分で練習してみよう: Rオンラインコンパイラ