R関数 %in%演算子,macth関数について
1.%in%演算子
この演算子の入力は以下の通り
vector1 %in% vector2
与えられた二つのベクトルに対して行う演算。左辺のベクトルの要素が右辺のベクトルの要素と重複しているかを判別し、TRUE/FALSEの論理値で返してくれる。以下のようなベクトルを作成し、実際に動かしてみる。
vector1に発注した商品を、vector2に届いた商品を並べ、発注したものが届いているかを確認する。まずはベクトルの作成。
order <- c("pure water","hexane","ethanol","DNA Loading Dye","parafilm")
received <- c("hexane","DNA Loading Dye","parafilm")
この二つに対して%in%演算子を用いると
order %in% received
#以下が結果
[1] FALSE TRUE FALSE TRUE TRUE
orderの要素を左からチェックしていったとき、左から1番目と3番目がFALSEになっています。これはreceivedの要素に"pure water"と"ethanol"が入っていないことになり商品がまだ到着していないことが分かりました。
また、結果からも分かるかと思いますが、それぞれのベクトルの要素の順番は結果に影響しません。この点は非常に便利だと思います。
さらに、どの要素が重複しているのか、また重複していないものはどれかを要素名として抜き出すことを試みます。上で行ったorder %in% receivedの結果を利用します。
order[order %in% received]
#以下が結果
"hexane" "DNA Loading Dye" "parafilm"
orderベクトルの中から重複する要素を抜き出すので、order[ ]を使っています。中身にあるorder %in% receivedはTRUE/FALSEの論理値であり、各要素を表示するかしないかを指定してくれます。
論理値を否定すれば重複していないものを抜き出すことができます。
order[! order %in% received]
#以下が結果
[1] "pure water" "ethanol"
以上が%in%演算子の構造です。
2.match関数
%in%演算子に似ているのがmatch関数です。入力は以下の通り。
match(vector1, vector2)
%in%演算子と同様、二つのベクトルに対し要素の重複を検出するものです。しかしその出力は少し異なります。実際にやってみます。
order <- c("pure water","hexane","ethanol","DNA Loading Dye","parafilm")
received <- c("hexane","DNA Loading Dye","parafilm")
match(order, received)
#以下が結果
[1] NA 1 NA 2 3
match関数が返してくれるのは「右辺のベクトルの何番目と重複しているか」になります。orderベクトル内のhexaneがreceivedベクトル内の1番目と重複しているため「1」と表示されています。重複がない場合「NA」が表示されます。
以上、%in%演算子とmatch関数の解説でした。