- はじめに
- あるベクトルから他ベクトルに「含まれる要素」あるいは「含まれない要素」を抽出する方法
- ベクトル間で、「すべて」あるいは「いずれか」と一致する関係があるか?
- まとめ
- 参考
- 【Rのジミ〜な小技シリーズ】
はじめに
処理途中で、ある数値・ある文字列が、こっちのベクトルにも含まれるのか、何番目に出現するのか等を考えると、しばしば悩ましい状況となります。。
この記事では、このような、R環境でのベクトル間の関係性を調べる方法を紹介します。きっと、役に立つシーンが多いはずです。
あるベクトルから他ベクトルに「含まれる要素」あるいは「含まれない要素」を抽出する方法
例1: 共通に含まれている要素を取り出す
あるベクトルから他ベクトルに含まれる要素(共通要素)の抽出を実行します。
%in%
という特殊な論理子を扱います。
x <- c(1, 2, 3, 4, 5) y <- c(4, 5, 6, 7, 8) # x を基準にする場合 a <- x %in% y a #[1] FALSE FALSE FALSE TRUE TRUE x0 <- x[a] x0 #[1] 4 5 # y を基準にする場合 b <- y %in% x b #[1] TRUE TRUE FALSE FALSE FALSE y[b] #[1] 4 5
例2: 共通に含まれない要素を取り出す
ここでは、あるベクトルから他ベクトルに含まれない要素(非共通要素)、x %in% y
の論理値の逆を求めます。
つまりは、!
でTRUE・FALSEを逆転させます。
x <- c("A", "B", "C", "D", "E") y <- c("F", "C", "A", "G", "E") # ベクトル y に含まれない ベクトル x の要素を取り出す c<- !(x %in% y) c #[1] FALSE TRUE FALSE TRUE FALSE x[c] #[1] "B" "D" # ベクトル x に含まれない ベクトル y の要素を取り出す d <- !(y %in% x) d #[1] TRUE FALSE FALSE TRUE FALSE y[d] #[1] "F" "G"
ベクトル間で、「すべて」あるいは「いずれか」と一致する関係があるか?
ここでは、all関数とany関数の使い方を解説します。
z <- c(1, 2, 3) #ベクトル内のすべてと一致するかで、「TRUE」を返す all(z == z) #[1] TRUE all(z == 1) #[1] FALSE #ベクトル内のいずれかと一致するかで、「TRUE」を返す any(z == z) #[1] TRUE any(z == 1) #[1] TRUE
まとめ
%in%
、all()
、any()
はマイナーな関数だけど、使える様になれば、プログラムの組み方が広がるはずです。。