Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Keeping only certain rows of a data frame based on a set of values

Tags:

r

subset

I have a data frame with an ID column and a few columns for values. I would like to only keep certain rows of the data frame based on whether or not the value of ID at that row matches another set of values (for instance, called "keep").

For simplicity, here is an example:

df <- data.frame(ID = sample(rep(letters, each=3)), value = rnorm(n=26*3))
keep <- c("a", "d", "r", "x")

How can I create a new data frame consisting of rows that only have IDs that match those of keep? I can do this for just one letter by using the which() function, but with multiple letters I get warning messages and incorrect returns. I know I could run a for loop through the data frame and extrapolate that way, but I'm wondering if there is a more elegant and efficient way of going about this. Thanks in advance.

like image 965
user2849910 Avatar asked Oct 05 '13 16:10

user2849910


People also ask

How do I get specific rows in R?

R – Get Specific Row of Matrix To get a specific row of a matrix, specify the row number followed by a comma, in square brackets, after the matrix variable name. This expression returns the required row as a vector.

How do you select rows from a DataFrame based on column values in R?

By using bracket notation on R DataFrame (data.name) we can select rows by column value, by index, by name, by condition e.t.c. You can also use the R base function subset() to get the same results. Besides these, R also provides another function dplyr::filter() to get the rows from the DataFrame.


1 Answers

Try df[df$ID %in% keep, ] or subset(df, ID %in% keep) -- see the help page for sets.

Edit: Also, if this were for a single letter, you could write e.g. df[df$ID == "a", ] instead of using which().

like image 106
Adrian Avatar answered Oct 03 '22 21:10

Adrian