2017-10-18 17 views
1
ncvars = c("prate", "arate", "wpd", "Atm1", "Atm2", "area", "fC", bas__1", "bas__asssaa", "bas__Clow", "bas__g2333e", "baser__arge", "bas__Aow", "bas__Aass") 

Maintenant, je veux supprimer tous les éléments qui sontComment puis-je supprimer tous les éléments d'un vecteur correspondant à un motif?

  • exactement le nom area
  • matchs cette chaîne bas__

Comment puis-je faire cela?


Essai

patterns <- c("bas__", "area") 
ncvars %>% 
    filter(.,grepl(paste(patterns, collapse="|"))) 
+0

Qu'avez-vous essayé jusqu'à présent? –

+0

Ajouté ........... – maximusdooku

+1

pouvez-vous dput vos données? –

Répondre

3

Vous pouvez simplement nier grepl avec ! et aussi pour correspondre exactement, vous avez besoin ^..$ points d'ancrage pour correspondre au début (^) et à la fin ($) de chaîne:

ncvars[!grepl('^area$|bas__', ncvars)] 

ncvars 
# [1] "prate"  "arate"  "wpd"   "Atm1"  "Atm2"  "area"  "fC"   "bas__1"  
# [9] "bas__asssaa" "bas__Clow" "bas__g2333e" "baser__arge" "bas__Aow" "bas__Aass" 
ncvars[!grepl('^area$|bas__', ncvars)] 
# [1] "prate"  "arate"  "wpd"   "Atm1"  "Atm2"  "fC"   "baser__arge" 
+0

Que signifient^et $ environs? Merci. – maximusdooku

+0

Ils correspondent au début et à la fin d'une chaîne. Donc '^ area $' correspond exactement à 'area' au lieu de sous-chaîne. – Psidom

+0

Ah. Merci beaucoup! – maximusdooku

1

Une solution tidyverse:

library(stringr) 
str_replace(ncvars, pattern = "^area$|^bas__", replacement = "") 
# [1] "prate"  "arate"  "wpd"   "Atm1"  
# [5] "Atm2"  ""   "fC"   "1"   
# [9] "asssaa"  "Clow"  "g2333e"  "baser__arge" 
# [13] "Aow"   "Aass"