如何根据另一个数据框中的多个列值进行过滤?

How to filter based on multiple column values from another data frame?

我有一个数据框,我正尝试根据第一个数据框的 2 个 ID 列进行过滤。这是数据框 1:

id_1 id_2
A 1
B 2
C 3

和数据框 2:

id_1 id_2
A 1
B 2
A 2

如果我做类似...

df2_filtered <- df2 %>%
filter(id_1 %in% df1$id_1 &
        id_2 %in% df1$id_2)

然后我拿回整个df2,这不是我想要的。即使“A”在 df1 的 id_1 中,而“2”在 df1 的 id_2 中,也没有同时具有两者的行。我该如何修复才能返回

id_1 id_2
A 1
B 2

如果您不受 dplyr 解决方案的约束,那么 data.table 有一个不错的选择:

library(data.table)
df1 = as.data.table(df1)
df2 = as.data.table(df2)
fintersect(df1, df2)
   id_1 id_2
1:    A    1
2:    B    2

您可以使用 dplyr::inner_join:

inner_join(data1, data2)

# Joining, by = c("id_1", "id_2")
# id_1 id_2
# 1    A    1
# 2    B    2