73

I do I remove all rows in a dataframe where a certain row meets a string match criteria?

For example:

A,B,C
4,3,Foo
2,3,Bar
7,5,Zap

How would I return a dataframe that excludes all rows where C = Foo:

A,B,C
2,3,Bar
7,5,Zap
1

6 Answers 6

132

Just use the == with the negation symbol (!). If dtfm is the name of your data.frame:

dtfm[!dtfm$C == "Foo", ]

Or, to move the negation in the comparison:

dtfm[dtfm$C != "Foo", ]

Or, even shorter using subset():

subset(dtfm, C!="Foo")
Sign up to request clarification or add additional context in comments.

5 Comments

Or just dftm[dtfm$C != "Foo", ] which is the same but slightly more easier to read.
.. or subset(dftm, C!="Foo")
How would you do this with an arbitrary number of conditions? Like if you wanted to remove all rows where "C = Foo" or "C = Bar"?
That would be another question. But the key is to use %in% and !. In your example !(C %in% c("Foo", "Bar"))
All good feedback. To complete Luciano's suggestion for the non-subset() example, I found that this worked to trim out undesired rows: dtfm <- dtfm[!(dtfm$C %in% c("Foo", "Bar")),] Just be sure not to forget the trailing comma in the [] brackets.
13

You can use the dplyr package to easily remove those particular rows.

library(dplyr)
df <- filter(df, C != "Foo")

1 Comment

This is going to apply to all columns in "df" right?
1

I had a column(A) in a data frame with 3 values in it (yes, no, unknown). I wanted to filter only those rows which had a value "yes" for which this is the code, hope this will help you guys as well --

df <- df [(!(df$A=="no") & !(df$A=="unknown")),]

Comments

1

if you wish to using dplyr, for to remove row "Foo":

df %>%
 filter(!C=="Foo")

Comments

0

I know this has been answered but here is another option:

library (dplyr)
df %>% filter(!c=="foo)
OR
df[!df$c=="foo", ]

1 Comment

Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.
0

If your exclusion conditions are stored in another data frame you could use rows_delete:

library(dplyr)

removal_df <- data.frame(C = "Foo")

df %>% 
  rows_delete(removal_df, by = "C")

  A B   C
1 2 3 Bar
2 7 5 Zap

This is also handy if you have multiple exclusion conditions so you do not have to write out a long filter statement.

Note: rows_delete is only available if you have dplyr >= 1.0.0

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.