4

I have a dataframe containing unique values of two variables:

df <- data.frame(V1=LETTERS,V2=c(1:26))

I'd like to filter another dataframe for values in df$V1 and corresponding value of df$V2. This is what I have tried which obviously doesn't produce the desired result:

df2 <- data.frame(V1=c('A','A','B','B','A'),
                    V2=c(1,2,2,3,4))
df2 %>% filter(V1 %in% unique(df$V1) & V2 %in% unique(df$V2))

The result I am expecting post filtering is:

  V1 V2
1  A  1
2  B  2

How do I achieve this?

3 Answers 3

3

You can also use

df[df$V1 %in% unique(df2$V1),]

#   V1 V2
# 1  A  1
# 2  B  2

or

library(tidyverse)

df %>% filter(V1 %in% unique(df2$V1))

#   V1 V2
# 1  A  1
# 2  B  2

In both cases above, you'll get the rows of df where V1 of df matches the (unique) values of V1 of df2.

Sign up to request clarification or add additional context in comments.

Comments

2
merge(df,df2)
  V1 V2
1  A  1
2  B  2

library(tidyverse)
inner_join(df,df2)
  V1 V2
1  A  1
2  B  2

Comments

1

Another option is intersect

library(dplyr)
intersect(df, df2)
#  V1 V2
#1  A  1
#2  B  2

Or using data.table (assuming both are data.table objects and have the same attributes)

library(data.table)
fintersect(df, df2)
#   V1 V2
#1:  A  1
#2:  B  2

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.