一意の値
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] 3duplicated()は、ベクトル内で以前にすでに現れたすべての値に対して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チャレンジ
簡単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")
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: Rオンラインコンパイラ