【问题标题】:How to filter based on multiple column values from another data frame?如何根据来自另一个数据框的多列值进行过滤?
【发布时间】:2022-01-19 00:25:03
【问题描述】:

我有一个数据框,我试图根据第一个数据框中的 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

【问题讨论】:

    标签: r dplyr filter


    【解决方案1】:

    如果您没有绑定到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
    

    【讨论】:

      【解决方案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
      

      【讨论】:

      • 这可以解决问题。虽然我必须在之后添加一个额外的 select 语句来删除我不想要的列,但这很容易。
      猜你喜欢
      • 2019-04-02
      • 2018-11-12
      • 1970-01-01
      • 2017-07-19
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 2021-05-19
      相关资源
      最近更新 更多