web-dev-qa-db-ja.com

ベクトルが与えられた要素を含むかどうかテストする

ベクトルが与えられた値を含んでいるかどうかを調べる方法は?

448
medriscoll

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
443
medriscoll

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
158
Justin Nafe

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
65
Dan Goldstein

出力に基づいてオプションをグループ化します。全ての例について以下のベクトルを仮定する。

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() を削除する。

41
ishandutta2007

%in%演算子を使用できます。

vec <- c(1, 2, 3, 4, 5)
1 %in% vec # true
10 %in% vec # false
34
ars

また、要素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))]
18
Armin

私はこの目的のために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

これらの関数は大文字と小文字を区別します。

11
ojdajuiceman