Reputation: 1720
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?
Upvotes: 4
Views: 4523
Reputation: 887981
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
Upvotes: 1
Reputation: 16121
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
.
Upvotes: 3
Reputation: 79358
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
Upvotes: 2