web-dev-qa-db-fra.com

Comment spécifier "ne contient pas" dans le filtre dplyr dans R

Je suis assez nouveau pour R.

Utiliser la table appelée SE_CSVLinelist_clean, Je veux extraire les lignes où la variable appelée where_case_travelled_1 _ Ne contient pas les chaînes "Outside Canada" OR "Outside province/territory of residence but within Canada". Puis créez une nouvelle table appelée SE_CSVLinelist_filtered.

SE_CSVLinelist_filtered <- filter(SE_CSVLinelist_clean, 
where_case_travelled_1 %in% -c('Outside Canada','Outside province/territory of residence but within Canada'))

Le code ci-dessus fonctionne lorsque je viens d'utiliser "c" et non pas "-c".
Alors, comment puis-je spécifier ce qui est mentionné ci-dessus lorsque je souhaite réellement exclure les lignes contenant ce contenu en dehors du pays ou de la province?

Merci beaucoup

36
ayk

Notez que %in% Renvoie un vecteur logique TRUE et FALSE. Pour le nier, vous pouvez utiliser ! Devant l'instruction logique:

SE_CSVLinelist_filtered <- filter(SE_CSVLinelist_clean, 
 !where_case_travelled_1 %in% 
   c('Outside Canada','Outside province/territory of residence but within Canada'))

En ce qui concerne votre approche originale avec -c(...), - Est un opérateur unaire qui "effectue une arithmétique sur des vecteurs numériques ou complexes (ou sur des objets pouvant être forcés à eux)" (à partir de help("-")). Puisque vous traitez avec un vecteur de caractère qui ne peut pas être forcé à être numérique ou complexe, vous ne pouvez pas utiliser -.

66
fishtank