100  ベクトルとロジカル

library(tidyverse)

ベクトルも比較オペレーターでLogicalの形で表せます

vec <- c(1:20)
vec
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20

この1から20までの数字で、

vec == 1
 [1]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

とすると、vecの中で1が該当する部分がTRUEになり、それ以外はFALSEです。これは、

1 == vec
 [1]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

逆でもなりたちます。

>なども同じような理屈で、TRUE、FALSEを返してくれます。

vec > 10
 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE
[13]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
vec < 5
 [1]  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

ということで、比較オペレーターを用いると、ベクトルの長さと同じ長さのロジカルベクトルが返ってきます。

大抵のRコースで最初に学ぶことをここで紹介します。

vec
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20

から特定の値を抜き出したい場合には、<ベクトル>[]という表現でできます。

vec <- c(1:5)
vec
[1] 1 2 3 4 5
vec[c(TRUE, TRUE, TRUE, TRUE, TRUE)]
[1] 1 2 3 4 5
vec[c(TRUE, TRUE, TRUE, TRUE, FALSE)]
[1] 1 2 3 4
vec[c(TRUE, TRUE, FALSE, TRUE, FALSE)]
[1] 1 2 4
vec[c(F,T,F,T,F)]
[1] 2 4

ということは、

vec > 3
[1] FALSE FALSE FALSE  TRUE  TRUE

がロジカルベクトルを返すことを利用してあげれば、

vec[vec > 3]
[1] 4 5

という感じでベクトルから任意の比較オペレーターを利用した条件でベクトルの要素を取り出すことができます。

この、ベクトル[ロジカルベクトル]は、Rで要素を取り出すときの基本的な書き方になるので、覚えておいていただくと役にたつと思います。(ただ、Tidyverseでデータ処理をする場合はそれほど頻出しません。)

次はロジカルオペレーターと呼ばれるものを紹介します。