Using grep in R to delete rows from a data.frame

You can use TRUE/FALSE subsetting instead of numeric.

grepl is like grep, but it returns a logical vector. Negation works with it.

 d[!grepl("K",d$z),]
   x  y      z
1  1  1  apple
2  1  2   pear
3  1  3 banana
4  1  4      A
5  1  5      B
6  1  6      C
7  1  7      D
8  1  8      E
9  1  9      F
10 1 10      G

For completeness, since R 3.3.0, grep and friends come with an invert argument:

new_d <- d[grep("K", d$z, invert = TRUE), ]

Here's your problem:

> grep("K",c("apple","pear","banana","A","B","C","D","E","F","G"))
integer(0)

Try grepl() instead:

d[!grepl("K",d$z),]

This works because the negated logical vector has an entry for every row:

> grepl("K",d$z)
 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> !grepl("K",d$z)
 [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE

Tags:

R

Row

Dataframe