Dans R, comment testez-vous un vecteur pour voir s'il contient un élément donné?test si un vecteur contient un élément donné
Répondre
Les fonctions match()
(renvoie la première apparition) et %in%
(renvoie une valeur booléenne) 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
Vous pouvez utiliser l'opérateur %in%
:
vec <- c(1, 2, 3, 4, 5)
1 %in% veC# true
10 %in% veC# false
Le tout() fonction rend le 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
Sachez que ceci se comporte différemment de '% in%': 'any (1 == NA)' renvoie 'NA', où' 1% dans% NA' renvoie 'FALSE'. – dash2
aussi trouver la position de l'élément "qui" peut être utilisé comme
pop <- c(3,4,5,7,13)
which(pop==13)
et de 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))]
'which' est en fait préférable parfois car cela vous donne * all * les positions correspondantes (comme un tableau), contrairement à' match'. Bien que ce n'était peut-être pas ce que le PO demandait, contrairement à http://stackoverflow.com/questions/1169388/finding-multiple-elements-in-a-vector – Fizz
Pourquoi s'embêter avec 'which' si vous voulez juste trouver les éléments pas dans 'Tset'? Vous pouvez simplement indexer 'pop' directement; 'pop [! pop% in% Tset]' – Houshalter
is.element()
fait pour le 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
Je sais que la documentation dit 'is.element (x, y) est identique à x% in% y'. Mais, je ne sais pas pourquoi, 'is.elements' fonctionne quand on mélange des nombres entiers et des nombres entiers et'% in% 'ne fonctionne pas – pomber
@pomber: Pourriez-vous donner un exemple de ceci? – discipulus
Je vraiment comme grep() et grepl() dans ce but. Grep() renvoie un vecteur d'entiers, qui indiquent où se trouvent les correspondances
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.
Par défaut, 'grep' prend une expression régulière comme premier élément, donc pour faire une correspondance exacte avec' "b" ', utilisez '^ e $' ou ajoutez ', fixed = TRUE'). – reinierpost
N'utilisez pas regex pour les correspondances exactes. Ceci est dangereux et peut avoir des résultats inattendus –
Oui, c'est une idée terrible, pas bonne, très mauvaise - inefficace et garantie de rupture. Par exemple. 'myvar <- 'blah'; grepl ('b', myvar, fixed = TRUE) 'retournera 'TRUE' même si' b 'n'est pas dans' myvar'. – dash2
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
quelconque()
> any('a'==v)
[1] TRUE
est.élément()
> is.element('a', v)
[1] TRUE
Pour trouver la première occurance:
match de()
> match('a', v)
[1] 2
Pour trouver toutes les occurences comme vecteur d'indices:
qui()
> which('a' == v)
[1] 2 4
pour trouver toutes les occurrences comme vecteur logique:
==
> 'a' == v
[1] FALSE TRUE FALSE TRUE FALSE
Edit: Retrait grep() et Grepl() de la liste pour des raisons mentionnées dans les commentaires
Comme déjà commenté [ici] (https://stackoverflow.com/questions/1169248/r-function-for-testing-if-a-vector-contains-a-given-element/34056066#comment66181358_34056066) et [ici] (https://stackoverflow.com/questions/1169248/r-function-for-testing-if-a-vector-contains-a-given-element/34056066#comment73025314_34056066), n'utilisez pas 'grep()' ou expressions régulières pour trouver des correspondances exactes. – Uwe
- 1. vérifier si div contient un élément dans jQuery
- 2. Comment vérifier si un élément contient un autre élément dans jQuery
- 3. Si textBox1 contient un entier
- 4. Comment détecter si un nombre donné est un nombre entier?
- 5. Quelle est la meilleure façon de détecter si un objet Javascript donné est un élément DOM?
- 6. Recherche d'un élément maximum raisonnable (sans bruit) dans un vecteur
- 7. Vérifie si une chaîne contient un astérisque (*)
- 8. Vérifier si un élément existe
- 9. Expression régulière pour vérifier si un mot de passe donné contient au moins un chiffre et une lettre dans C#?
- 10. Comment puis-je déterminer si un groupe AD contient un DirectoryEntry donné d'un autre domaine (de confiance)?
- 11. Différentes façons d'écrire sur un élément donné en utilisant jquery
- 12. Comment savoir si un UITextField contient un caractère spécifique
- 13. Dans jQuery, si vous supprimez un élément, les événements qu'il contient seront-ils supprimés?
- 14. Comment savoir si un élément ne contient qu'un signe £ avec JQuery?
- 15. Comment tester si un arbre BSP donné est optimal?
- 16. Test si un objet implémente une interface
- 17. test pour voir si un XElement existe
- 18. C++ étendre un vecteur avec un autre vecteur
- 19. xpath: recherche un noeud ayant un attribut donné dont la valeur contient une chaîne
- 20. séquence contient plus d'un élément
- 21. Comment vérifier si un périphérique USB donné est branché?
- 22. Comment vérifier si un répertoire donné existe dans Ruby
- 23. Vérifiez si un tampon char * contient des caractères UTF8?
- 24. Étant donné une ressource classpath, existe-t-il un moyen d'obtenir l'objet java.io.File qui l'a/contient?
- 25. Vérification si un élément de collection existe dans Oracle
- 26. Existe-t-il un moyen de cibler un élément en fonction de ce qu'il contient?
- 27. Je reçois ces caractères étranges quand j'essaie d'imprimer un élément de vecteur!
- 28. Délai d'attente WCF si j'ajoute 1 élément à un tableau
- 29. La séquence ne contient aucun élément?
- 30. Construire un vecteur à partir de composants contenus dans un autre type de vecteur
parfois, je me demande pourquoi R ne fonctionne tout simplement pas utiliser le mot contient pour le rendre plus facile les utilisateurs – greg121
considèrent que « dans » est contenu dans "conta (in) s"; Je soutiens que "dans" est un concurrent considérablement concis dans ce contexte – hedgedandlevered
Peut-être avec l'ajout de flanquant '%' -signs qui est. Le mot 'in' est un mot réservé dans R utilisé dans la construction en boucle. –