table()を使ったカウント
CoddyのRジャーニー「ロジックとフロー」セクションの一部。レッスン 15/64。
table(x) は各値が何回出現するかを数えます。結果には値が名前として付けられ、アルファベット順に並べられるため、ある値のカウントは t[["value"]] となります:
votes <- c("tea", "coffee", "tea", "juice", "tea")
t <- table(votes)
print(t[["tea"]])
print(names(t))
print(as.vector(t))出力:
[1] 3
[1] "coffee" "juice" "tea"
[1] 1 1 3sort(t, decreasing = TRUE)はカウントを大きい順に並べます。which.max(t)は最大のカウントの位置を返します。カウントが同じ場合は、最初の値、つまりアルファベット順で最初の値を選びます。
votes <- c("tea", "coffee", "tea", "juice", "coffee")
t <- table(votes)
print(names(t)[which.max(t)])
print(max(t))出力:
[1] "coffee"
[1] 2一度も出現しない値は、そもそも表に存在しないため、読み取る前に %in% names(t) で確認します。
t <- table(c("A", "B", "A"))
for (grade in c("A", "B", "C")) {
n <- if (grade %in% names(t)) t[[grade]] else 0
cat(grade, n, "\n")
}出力:
A 2
B 1
C 0 table() は数値や論理値もカウントします。1つの値を数えるには、表を作成するよりも sum(x == value) のほうが短くなります:
rolls <- c(6, 2, 6, 6, 1)
print(sum(rolls == 6))
print(table(rolls > 3)[["TRUE"]])出力:
[1] 3
[1] 3チャレンジ
簡単vote_winner(votes)を完成させてください。最も多くの票を獲得した選択肢を、その票数とともにtea (3 votes)のような形式で返します。選択肢が同票の場合は、アルファベット順で先に来るものを返してください。
用意されているコードは、カンマ区切りの行として票を読み込み、返された値を出力します。
自分で試してみよう
vote_winner <- function(votes) {
# ここにコードを書いてください
""
}
# 提供された入出力コード:そのままにしておいてください
input <- suppressWarnings(readLines(file("stdin")))
cat(vote_winner(strsplit(input[1], ",")[[1]]), sep = "\n")
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: Rオンラインコンパイラ