web-dev-qa-db-fra.com

Teste si un vecteur contient un élément donné

Comment vérifier si un vecteur contient une valeur donnée?

452
medriscoll

Les fonctions match() (retourne la première apparition) et %in% (retourne un booléen) sont conçues pour cela.

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

'b' %in% v
## returns TRUE

match('b',v)
## returns the first location of 'b', in this case: 2
449
medriscoll

is.element() crée un code plus lisible et est identique à %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
159
Justin Nafe

La fonction any () crée un code lisible

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

Je vais regrouper les options en fonction de la sortie. Supposons le vecteur suivant pour tous les exemples.

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

Pour vérifier la présence:

% en%

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

any ()

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

is.element ()

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

Pour trouver la première fois:

match ()

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

Pour trouver toutes les occurrences en tant que vecteur d'indices:

quel ()

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

Pour trouver toutes les occurrences en tant que vecteur logique :

==

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

Éditer: Supprimer grep () et grepl () de la liste pour la raison mentionnée dans les commentaires

45
ishandutta2007

Vous pouvez utiliser l'opérateur %in%:

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

Aussi pour trouver la position de l'élément "qui" peut être utilisé comme

pop <- c(3,4,5,7,13)

which(pop==13)

et pour trouver les éléments qui ne sont pas contenus dans le vecteur cible, on peut faire ceci:

pop <- c(1,2,4,6,10)

Tset <- c(2,10,7)   # Target set

pop[which(!(pop%in%Tset))]
18
Armin

J'aime vraiment grep () et grepl () à cette fin.

grep () renvoie un vecteur d'entiers indiquant où sont les correspondances.

yo <- c("a", "a", "b", "b", "c", "c")

grep("b", yo)
[1] 3 4

grepl () renvoie un vecteur logique, avec "TRUE" à l'emplacement des correspondances.

yo <- c("a", "a", "b", "b", "c", "c")

grepl("b", yo)
[1] FALSE FALSE  TRUE  TRUE FALSE FALSE

Ces fonctions sont sensibles à la casse.

10
ojdajuiceman