101  ロジカルオペレーターと!

library(tidyverse)

だいぶ長々とオペレーターのことを解説してきますが、ここで学んだいること、全てはこの後の行操作を行う場合にかなり重要な知識となりますのでもう少しがんばってください。

比較オペレーター以外に、ロジカルオペレーターというものがあります。

ロジカルオペレーターは

の2種類です。(本当は&&,||,xorとか他にもありますが入門の時点ではこの二つの動作を覚えておくだけで良いと思います。)

&は、左右両方がTRUEであれば、TRUEでそれ以外は全部FALSEです。|は、左右どちらかがTRUEであればTRUEになります。

TRUE  & TRUE 
[1] TRUE
TRUE  & FALSE
[1] FALSE
FALSE & TRUE 
[1] FALSE
FALSE & FALSE
[1] FALSE
TRUE  | TRUE 
[1] TRUE
TRUE  | FALSE
[1] TRUE
FALSE | TRUE 
[1] TRUE
FALSE | FALSE
[1] FALSE

また、!はselectでは選択しないという否定の意味が持たされてありましたが、ロジカルの前に!を置くことでTRUE、FALSEをひっくり返すことが可能です。

!TRUE
[1] FALSE
!(TRUE&FALSE)
[1] TRUE
!c(T,T,F)
[1] FALSE FALSE  TRUE

, <, >=, <=, ==, != ,& | ,!これらの記号を組み合わせて、条件設定を考えることが、この後お伝えする行の操作で非常に重要になります。

行操作は列操作と違い、時に何万というデータに対してTRUEとFALSEを振り分けて、抽出・加工するという作業になります。

どんな文字列や値が含まれたベクトルに対しても、思うようにTRUE, FALSEを設定できるようになると、データクリーニングの自由度はかなり高くなります。

そのために、たとえば、

vec <- c(1,2,3,4,5,6)

vec[vec > 3] #3より大きい数字をとりだす
[1] 4 5 6
vec[vec %% 2 == 0] # %%は「あまり」を表すので、
[1] 2 4 6
          # 2で割ったあまりが0となるものを
          # TRUEとして2の倍数をとりだしたり
vec[vec >= 2 & vec <= 5] #2以上かつ5以下の数字をとりだしたり
[1] 2 3 4 5

することができるようになります。それぞれ

vec > 3
[1] FALSE FALSE FALSE  TRUE  TRUE  TRUE
vec %% 2 == 0
[1] FALSE  TRUE FALSE  TRUE FALSE  TRUE
vec >= 2 & vec <= 5
[1] FALSE  TRUE  TRUE  TRUE  TRUE FALSE

のTRUE、FALSEの値の位置とvecの位置を。

以上、Logical型とその周辺についての解説と実践は終了です。実践部分が結構長くなったので、練習問題で確実に内容を理解していることを確認しておきましょう。