077-080 Logical/Boolean型
Logical/Boolean型
これまでの型:
- 数字:1, 2, 3, 10.4, 100 …
- 文字列: “Rは楽しい”, “Hi there!”…
Logical/Boolean:
TRUE
かFALSE
の二通りのみをとれる型- TRUE/FALSEで真偽の「判定」を行うのに活用
単独での動作
TRUE FALSE TRUE + TRUE TRUE + FALSE FALSE + FALSE
TRUE
の正体は「1」です。- このBooleanが出現するのは、「判定」をRの中で実施したときです。
- "ごはんが美味しい" という文字列 と "味噌汁が美味しい" という文字列は同じ(==)かという場合は
"ごはんが美味しい" == "味噌汁が美味しい"
- FALSEですね。(内容は関係ないです)他にも、
450 == 450 431 == 4
- 当たり前といえば当たり前の結果になります。
- 「=」が2つなのに注意が必要です。
340 = 340
- 実は、= は <- と同じ意味をもっていて、上の例では、340という変数に340を代入しようとしたものの、数字に別の意味は持たせられない!とおこられました。
a <- 10 a b = 10 b
- ただし、=での代入は非推奨で、<-を使うことが広く推奨されています。(->)
- なぜかは知りません。
a == b
- != という記号は、「同じでない」を示します。
450 != 90 340 != 340 "ごはんが美味しい" == "味噌汁が美味しい" "ごはんが美味しい" != "味噌汁が美味しい"
- 他、 > < >= <= も数学的な比較と同じ意味合いで利用できます。
34 < 34 34 <= 34 35 > 35 35 >= 35 a <- 10 a < 1 b <- 100 a < b
等々
vectorでのロジカル
- ベクトルも比較演算子でLogicalの形で表せます
vec <- c(1:20) vec vec == 1 1 == vec vec > 10 vec < 5
A が Bに含まれるか? というものを調べるには、 A %in% B
を使います。
c(1,2,3,4,5) %in% c(3,4) c(3,4) %in% c(1,2,3,4,5)
- 本当は、大抵のRコースで最初に学ぶことをここで紹介します。
vec
から特定の値を抜き出したい場合には、<ベクトル>[<booleanのベクトル>]
という表現でできます。
vec <- c(1:5) vec[c(TRUE, TRUE, TRUE, TRUE, TRUE)] vec[c(TRUE, TRUE, TRUE, TRUE, FALSE)] vec[c(TRUE, TRUE, FALSE, TRUE, FALSE)] vec[c(FALSE, TRUE, FALSE, TRUE, FALSE)]
- ということは、
vec > 3 vec[vec > 3]
- という感じでベクトルから取り出すことができます。
- 「ロジカルのベクトル」は「ベクトルからその要素を取り出すとき」に多用するものとなります
<><=>=&|
TRUE & TRUE #TRUE TRUE & FALSE #FALSE FALSE & FALSE #FALSE TRUE & TRUE (5 == 5) (7 > 3) 5==5 & 7>3 TRUE | TRUE #TRUE TRUE | FALSE #TRUE FALSE | FALSE #FALSE
>
,<
,>=
,<=
,==
,!=
,&
,|
,!
- これらの記号を組み合わせて、条件設定を考えることが、行の操作で非常に重要になります。
- 行操作は列操作と違い、時に何万というデータに対してTRUEとFALSEを振り分けて、TRUE/FALSEを抽出・加工するという作業になります。
どんな文字列が含まれたベクトルに対しても、思うようにTRUE, FALSEが設定できるようになると、データクリーニングは自由自在にできるようになります。
そのために、たとえば、
vec <- c(NA,1,2,3,NA,4,5,6) vec[is.na(vec)] #でNAをとりだしたり(意味ない・・・) vec[!is.na(vec)] #でNAを除去したり。
- のようなことができるようになると良いです。
- 実は[]を利用したベクトル操作が、Rの王道ではありますが、tidyverseのエコシステムが非常に便利なので、この講義ではあんまり出てきません。