grepl dans R pour trouver des correspondances à l'une des listes de chaînes de caractères
Est-il possible d'utiliser un grepl argument en se référant à une liste de valeurs, peut-être à l'aide de l' %en% de l'opérateur? Je veux prendre les données ci-dessous et si le nom d'animal a du "chien" ou "chat", je veux revenir à une certaine valeur, disons, de "garder"; si elle n'a pas de "chien" ou "chat", je tiens à revenir sur "ignorer".
data <- data.frame(animal = sample(c("cat","dog","bird", 'doggy','kittycat'), 50, replace = T))
Maintenant, si je devais juste pour ce faire, strictement correspondance des valeurs, disons, "chat" et "chien", je pourrais utiliser l'approche suivante:
matches <- c("cat","dog")
data$keep <- ifelse(data$animal %in% matches, "Keep", "Discard")
Mais l'utilisation de grep ou grepl ne se réfère qu'au premier argument dans la liste:
data$keep <- ifelse(grepl(matches, data$animal), "Keep","Discard")
retourne
Warning message:
In grepl(matches, data$animal) :
argument 'pattern' has length > 1 and only the first element will be used
Remarque, j'ai vu ce fil dans ma recherche, mais cela ne fonctionne pas:
grep à l'aide d'un personnage vectoriel avec plusieurs modèles
source d'informationauteur Marc Tulla | 2014-08-19
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser un "ou" (
|
) dans l'expression régulière degrepl
.L'expression régulière
dog|cat
raconte le moteur d'expression régulière pour rechercher des"dog"
ou"cat"
et retourner les matchs pour les deux.Pas sûr de ce que vous avez essayé, mais cela semble fonctionner:
Similaire à la réponse que vous avez rejoint.
L'astuce est d'utiliser de la pâte:
De sorte qu'il crée une expression régulière avec soit chien OU chat et également de travailler avec une longue liste de modèles sans avoir à taper à chaque.
Edit:
Dans le cas où vous faites cela à plus tard sur le sous-ensemble des données.cadre en fonction de la "Garder" et "ignorer les écritures, vous pourriez le faire plus directement à l'aide de:
De cette façon, les résultats de
grepl
qui est VRAI ou FAUX sont utilisés pour le sous-ensemble.Essayez d'éviter
ifelse
autant que possible. C'est, par exemple, fonctionne très bien,Pour un
123
de la graine, vous obtiendrez