【问题标题】:Subsetting one df based on two columns of df1 and df2 [duplicate]根据 df1 和 df2 的两列对一个 df 进行子集 [重复]
【发布时间】:2022-02-01 22:58:49
【问题描述】:

我正在尝试根据匹配另一个 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() 函数来做这件事,但实现越简单越好!

【问题讨论】:

  • 仅供参考 subset 是基本功能,而不是 dplyr。您正在寻找的是半连接或内连接

标签: r subset


【解决方案1】:

一个可能的解决方案,基于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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 1970-01-01
    • 2015-01-27
    • 2021-04-07
    • 2020-07-14
    • 1970-01-01
    相关资源
    最近更新 更多