在多个条件下使用dplyr filter()进行过滤

时间:2018-07-05 08:54:50

标签: r dplyr

我有一个包含两个变量的唯一值的数据框:

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

我想为df$V1中的值和df$V2的对应值过滤另一个数据帧。这是我尝试过的,显然无法产生预期的结果:

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))

我期望后过滤的结果是:

  V1 V2
1  A  1
2  B  2

我该如何实现?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

您也可以使用

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

#   V1 V2
# 1  A  1
# 2  B  2

library(tidyverse)

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

#   V1 V2
# 1  A  1
# 2  B  2

在上述两种情况下,您都将获得df的行,其中V1的{​​{1}}与df的{​​{1}}的(唯一)值匹配。

答案 2 :(得分:1)

另一个选项是intersect

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

或使用data.table(假设它们都是data.table对象并具有相同的属性)

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