r - Test if a vector contains a given element

ID : 3572

viewed : 293

Tags : rvectorr-faqr





Top 5 Answer for r - Test if a vector contains a given element

vote vote

100

Both the match() (returns the first appearance) and %in% (returns a Boolean) functions are designed for this.

v <- c('a','b','c','e')  'b' %in% v ## returns TRUE  match('b',v) ## returns the first location of 'b', in this case: 2 
vote vote

81

is.element() makes for more readable code, and is identical to %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 
vote vote

73

I will group the options based on output. Assume the following vector for all the examples.

v <- c('z', 'a','b','a','e') 

For checking presence:

%in%

> 'a' %in% v [1] TRUE 

any()

> any('a'==v) [1] TRUE 

is.element()

> is.element('a', v) [1] TRUE 

For finding first occurance:

match()

> match('a', v) [1] 2 

For finding all occurances as vector of indices:

which()

> which('a' == v) [1] 2 4 

For finding all occurances as logical vector:

==

> 'a' == v [1] FALSE  TRUE FALSE  TRUE FALSE 

Edit: Removing grep() and grepl() from the list for reason mentioned in comments

vote vote

70

The any() function makes for readable code

> 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 
vote vote

56

You can use the %in% operator:

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

Top 3 video Explaining r - Test if a vector contains a given element







Related QUESTION?