R言語による医療データ分析

R言語によるデータ分析のオンラインコースを中心に、さまざまなデータ分析について記載してあります。

077-080 Logical/Boolean型

まとめ一覧

Logical/Boolean型

  • これまでの型:

    • 数字:1, 2, 3, 10.4, 100 …
    • 文字列: “Rは楽しい”, “Hi there!”…
  • Logical/Boolean: TRUEFALSEの二通りのみをとれる型

  • 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のエコシステムが非常に便利なので、この講義ではあんまり出てきません。

まとめ一覧