根据 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
我正在尝试根据匹配另一个 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