ベクトルが与えられた値を含んでいるかどうかを調べる方法は?
match()
(最初の外観を返す)と%in%
(ブール値を返す)の両方の関数は、このために設計されています。
v <- c('a','b','c','e')
'b' %in% v
## returns TRUE
match('b',v)
## returns the first location of 'b', in this case: 2
is.element()
はより読みやすいコードになり、%in%
と同じです。
v <- c('a','b','c','e')
is.element('b', v)
'b' %in% v
## both return TRUE
is.element('f', v)
'f' %in% v
## both return FALSE
subv <- c('a', 'f')
subv %in% v
## returns a vector TRUE FALSE
is.element(subv, v)
## returns a vector TRUE FALSE
any() 関数はコードを読みやすくする
> w <- c(1,2,3)
> any(w==1)
[1] TRUE
> v <- c('a','b','c')
> any(v=='b')
[1] TRUE
> any(v=='f')
[1] FALSE
出力に基づいてオプションをグループ化します。全ての例について以下のベクトルを仮定する。
v <- c('z', 'a','b','a','e')
存在確認用:
%in%
> 'a' %in% v
[1] TRUE
どれか()
> any('a'==v)
[1] TRUE
is.element()
> is.element('a', v)
[1] TRUE
最初の出現を見つけるために:
match()
> match('a', v)
[1] 2
すべての出現箇所をインデックスのベクトルとして見つけるために:
which()
> which('a' == v)
[1] 2 4
すべての出現箇所を論理ベクトル:として見つけるために:
==
> 'a' == v
[1] FALSE TRUE FALSE TRUE FALSE
編集:コメントに記載されている理由から、リストから grep() および grepl() を削除する。
%in%
演算子を使用できます。
vec <- c(1, 2, 3, 4, 5)
1 %in% vec # true
10 %in% vec # false
また、要素whichの位置を見つけるために
pop <- c(3,4,5,7,13)
which(pop==13)
そして、ターゲットベクトルに含まれていない要素を見つけるために、これをすることができます:
pop <- c(1,2,4,6,10)
Tset <- c(2,10,7) # Target set
pop[which(!(pop%in%Tset))]
私はこの目的のためにgrep()とgrepl()が本当に好きです。
grep()は整数のベクトルを返し、一致の場所を示します。
yo <- c("a", "a", "b", "b", "c", "c")
grep("b", yo)
[1] 3 4
grepl()は、一致箇所に "TRUE"を指定した論理ベクトルを返します。
yo <- c("a", "a", "b", "b", "c", "c")
grepl("b", yo)
[1] FALSE FALSE TRUE TRUE FALSE FALSE
これらの関数は大文字と小文字を区別します。