如何根据另一个数据框中的多个列值进行过滤?
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
我有一个数据框,我正尝试根据第一个数据框的 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