web-dev-qa-db-fra.com

Supprimer les lignes contenant des chaînes spécifiques dans R

Je voudrais exclure les lignes contenant une chaîne "REVERSE", mais mes lignes ne correspondent pas exactement au mot Word, elles le contiennent simplement.

Mon cadre de données d'entrée:

   Value   Name 
    55     REVERSE223   
    22     GENJJS
    33     REVERSE456
    44     GENJKI

Mon rendement attendu:

   Value   Name 
    22     GENJJS
    44     GENJKI
45
user3091668

Cela devrait faire l'affaire:

df[- grep("REVERSE", df$Name),]

Ou une version plus sûre serait:

df[!grepl("REVERSE", df$Name),]
68
Pop

En fait j'utiliserais:

df[ grep("REVERSE", df$Name, invert = TRUE) , ]

Cela évitera de supprimer tous les enregistrements si le mot recherché n'est contenu dans aucune des lignes.

17
BobD59

Vous pouvez utiliser la fonction stri_detect_fixed du package stringi

stri_detect_fixed(c("REVERSE223","GENJJS"),"REVERSE")
[1]  TRUE FALSE
4
bartektartanus

Vous pouvez utiliser dplyr::filter() et nier une correspondance grepl():

library(dplyr)

df %>% 
  filter(!grepl('REVERSE', Name))

Ou avec dplyr::filter() et en annulant une correspondance stringr::str_detect():

library(stringr)

df %>% 
  filter(!str_detect(Name, 'REVERSE'))
3
sbha