Menu
Coddy logo textTech

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 3

sort(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
challenge icon

チャレンジ

簡単

vote_winner(votes)を完成させてください。最も多くの票を獲得した選択肢を、その票数とともにtea (3 votes)のような形式で返します。選択肢が同票の場合は、アルファベット順で先に来るものを返してください。

用意されているコードは、カンマ区切りの行として票を読み込み、返された値を出力します。

自分で試してみよう

vote_winner <- function(votes) {
  # ここにコードを書いてください
  ""
}

# 提供された入出力コード:そのままにしておいてください
input <- suppressWarnings(readLines(file("stdin")))
cat(vote_winner(strsplit(input[1], ",")[[1]]), sep = "\n")
quiz icon腕試し

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

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

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