This should do the trick:
df[- grep("REVERSE", df$Name),]
Or a safer version would be:
df[!grepl("REVERSE", df$Name),]
質問
I would like to exclude lines containing a string "REVERSE", but my lines do not match exactly with the word, just contain it.
My input data frame:
Value Name
55 REVERSE223
22 GENJJS
33 REVERSE456
44 GENJKI
My expected output:
Value Name
22 GENJJS
44 GENJKI
解決
This should do the trick:
df[- grep("REVERSE", df$Name),]
Or a safer version would be:
df[!grepl("REVERSE", df$Name),]
他のヒント
You could use dplyr::filter()
and negate a grepl()
match:
library(dplyr)
df %>%
filter(!grepl('REVERSE', Name))
Or with dplyr::filter()
and negating a stringr::str_detect()
match:
library(stringr)
df %>%
filter(!str_detect(Name, 'REVERSE'))
Actually I would use:
df[ grep("REVERSE", df$Name, invert = TRUE) , ]
This will avoid deleting all of the records if the desired search word is not contained in any of the rows.
You can use stri_detect_fixed function from stringi
package
stri_detect_fixed(c("REVERSE223","GENJJS"),"REVERSE")
[1] TRUE FALSE
You can use this function if it's multiple string
df[!grepl("REVERSE|GENJJS", df$Name),]
You can use it in the same datafram (df) using the previously provided code
df[!grepl("REVERSE", df$Name),]
or you might assign a different name to the datafram using this code
df1<-df[!grepl("REVERSE", df$Name),]
A late answer building on BobD59's and hidden-layer's responses.
This removes multiple specific strings, whilst avoiding deleting all of the records if the desired search word is not contained in any of the rows.
df1 <-
df[!grepl("REVERSE|GENJJS", df$Name), (invert = TRUE), ]