Menu
Coddy logo textTech

一意の値

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

R には個別の集合型がありません。集合は、重複する値を持たないベクトルです。unique() は重複を削除し、各値の最初の出現を元の順序で保持します。

tags <- c("r", "stats", "r", "data", "stats")
print(unique(tags))
print(length(unique(tags)))

出力:

[1] "r"     "stats" "data" 
[1] 3

duplicated()は、ベクトル内で以前にすでに現れたすべての値に対してTRUEを返します。最初に現れる値はFALSEです:

ids <- c(7, 3, 7, 9, 3)
print(duplicated(ids))
print(ids[duplicated(ids)])

出力:

[1] FALSE FALSE  TRUE FALSE  TRUE
[1] 7 3

どちらの関数も値を正確に比較するため、"R"と"r"は異なります。大文字と小文字を区別しない場合は、まずテキストを正規化します。

langs <- c("R", "python", "r", "Python")
print(length(unique(langs)))
print(unique(tolower(langs)))

出力:

[1] 4
[1] "r"      "python"

unique() は数値にも機能し、sort(unique(x)) は重複しない値を昇順で一覧表示します。sum(duplicated(x)) は、何個の要素が重複しているかを数えます。

rolls <- c(4, 2, 6, 2, 4, 4)
print(sort(unique(rolls)))
print(sum(duplicated(rolls)))

出力:

[1] 2 4 6
[1] 3
challenge icon

チャレンジ

簡単

count_distinct(tags)を完成させてください。大文字と小文字を区別しない場合に、異なるタグがいくつあるかを返します。Rとrは1つとして数えます。

用意されたコードは、タグをカンマ区切りの行として読み取り、返された数値を出力します。

自分で試してみよう

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

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

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

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

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