Comment vérifier si un vecteur contient une valeur donnée?
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
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
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
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
Vous pouvez utiliser l'opérateur %in%
:
vec <- c(1, 2, 3, 4, 5)
1 %in% vec # true
10 %in% vec # false
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))]
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.