[R] how to delete specific rows in a data frame where the first column matches any string from a list

Wacek Kusnierczyk Waclaw.Marcin.Kusnierczyk at idi.ntnu.no
Fri Feb 6 17:00:42 CET 2009

Laura Rodriguez Murillo wrote:
> Hi,
> I'm new in the mailing list but I would appreciate if you could help
> me with this:
> I have a big matrix from where I need to delete specific rows. The
> second entry on these rows to delete should match any string within a
> list (other file with just one column).
> Thank you so much!

here's one way to do it, illustrated with dummy data:

# dummy character matrix
data = matrix(replicate(20, paste(sample(letters, 20), collapse="")),

# filter out rows where second column does not match 'a'
data[-grep('a', d[,2]),]

this will work also if your data is actually a data frame:

data = as.data.frame(data)
data[-grep('a', d[,2]),]

note, due to a known issue with grep, this won't work correctly if there
are *no* rows that do *not* match the pattern:

data[-grep('1', d[,2]),]
# should return all of data, but returns an empty matrix

with the upcoming version of r, grep will have an additional argument
which will make this problem easy to fix:

data[grep('a', d[,2], invert=TRUE),]


More information about the R-help mailing list