web-dev-qa-db-ja.com

Rの特定の文字列を含む行を削除する

文字列「REVERSE」を含む行を除外したいのですが、私の行はWordと完全には一致せず、単に含まれています。

私の入力データフレーム:

   Value   Name 
    55     REVERSE223   
    22     GENJJS
    33     REVERSE456
    44     GENJKI

私の期待される出力:

   Value   Name 
    22     GENJJS
    44     GENJKI
45
user3091668

これでうまくいくはずです:

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

または、より安全なバージョンは次のとおりです。

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

実際に私は使用します:

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

これにより、目的の検索ワードがどの行にも含まれていない場合、すべてのレコードが削除されなくなります。

17
BobD59

stringiパッケージのstri_detect_fixed関数を使用できます

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

dplyr::filter()を使用して、grepl()の一致を否定できます。

library(dplyr)

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

または、dplyr::filter()stringr::str_detect()の一致を否定します:

library(stringr)

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