根据 df1 和 df2 的两列对一个 df 进行子集化

Subsetting one df based on two columns of df1 and df2

我正在尝试根据匹配另一个 DF 的两列来对一个 DF 进行子集化。

DF1:

ColA    ColB     ColD
d       4        3
e       3        23
w       9        93 
q       2        4

DF2:

ColA    ColB     ColD
d       4        9
e       343      545
w       9        76 
x       34       94
y       01       0

我想对 DF2 进行子集化以仅包含在 DF 1 中找到 ColA 和 ColB 的行。在这种情况下,所需的输出将是:

ColA    ColB     ColD
d       4        9
w       9        76 

如何基于两列进行子集化?如果可能的话,我想用 dplyr, subset() 函数来实现,但是实现越简单越好!

可能的解决方案,基于inner_join

library(tidyverse)

df1 <- data.frame(
  stringsAsFactors = FALSE,
  ColA = c("d", "e", "w", "q"),
  ColB = c(4L, 3L, 9L, 2L),
  ColD = c(3L, 23L, 93L, 4L)
)

df2 <- data.frame(
  stringsAsFactors = FALSE,
  ColA = c("d", "e", "w", "x", "y"),
  ColB = c(4L, 343L, 9L, 34L, 1L),
  ColD = c(9L, 545L, 76L, 94L, 0L)
)

df2 %>% 
  inner_join(df1, by = c("ColA", "ColB")) %>% 
  select(-ColD.y, ColD = ColD.x)

#>   ColA ColB ColD
#> 1    d    4    9
#> 2    w    9   76