Home > Back-end >  filter dataframe based on two columns of another dataframe
filter dataframe based on two columns of another dataframe

Time:04-16

Here the two simulated dataframes:

df_1 <- data.frame(ID=c(1,1,1,2,2,3,4,4,4,5), type=c("A","G","D","B","C","R","U","A","T","E"))

df_2 <- data.frame(ID=c(1,1,2,2,3,4,5,5,6,7), type=c("A","Y","Q","B","C","R","U","E","J","A"))

ID type       ID type
1   A         1   A
1   G         1   Y
1   D         2   Q
2   B         2   B
2   C         3   C
3   R         4   R
4   U         5   U
4   A         5   E
4   T         6   J
5   E         7   A

I want to keep only rows from df_2 that have equal ID AND type of df_1, obtaining:

ID type
1   A
2   B
5   E

I tried to use the following code but it doesn't work properly

data <- df_2 %>% 
          filter(ID %in% df_1$ID & type==df_1$type)

CodePudding user response:

The function you need is dplyr::intersect.

library(dplyr)

dplyr::intersect(df_1, df_2)

  ID type
1  1    A
2  2    B
3  5    E

CodePudding user response:

You could use an inner_join()

  df_2 %>% 
    inner_join(df_1, by = c("ID", "type"))
  • Related