【问题标题】:Lookup in R with two criteria使用两个条件在 R 中查找
【发布时间】:2023-02-01 16:32:27
【问题描述】:

我有两个数据框:

df1 <- data.frame(row1 = c("A", "A", "A", "B", "B", "B", "C", "C", "C"),
                  row2 = c("aa", "bb", "cc", "aa", "bb", "cc", "aa", "bb", "cc"), 
                  row3 = c(1, 5, 7, 6, 8, 9, 3, 2, 4))

  row1 row2 row3
1    A   aa    1
2    A   bb    5
3    A   cc    7
4    B   aa    6
5    B   bb    8
6    B   cc    9
7    C   aa    3
8    C   bb    2
9    C   cc    4

df2 <- data.frame(row1 = c("A", "A", "B", "B", "B", "C", "C"),
                  row2 = c("aa", "bb", "aa", "bb", "cc", "aa", "cc"))

  row1 row2
1    A   aa
2    A   bb
3    B   aa
4    B   bb
5    B   cc
6    C   aa
7    C   cc

我想根据第 1 行和第 2 行为 df2 创建第 3 行。所需的输出如下所示:

  row1 row2 row3
1    A   aa    1
2    A   bb    5
3    B   aa    6
4    B   bb    8
5    B   cc    9
6    C   aa    3
7    C   cc    4

在我的真实数据框中,df2 有更多列(但应根据两个特定列添加 row3)。我也用 left join 尝试过(不幸的是没有保存我的方法)但这也不适用于我的实现。

我找到了很多“查找”的解决方案,但所有这些都只比较一列,我无法弄清楚两个如何比较多列。可能有一个简单的解决方案,但我被卡住了。谁能帮我这个?

【问题讨论】:

标签: r lookup


【解决方案1】:

事实上,dplyr::left_join() 正是您在这里需要的。

library(dplyr)

df1 <- data.frame(row1 = c("A", "A", "A", "B", "B", "B", "C", "C", "C"),
                  row2 = c("aa", "bb", "cc", "aa", "bb", "cc", "aa", "bb", "cc"), 
                  row3 = c(1, 5, 7, 6, 8, 9, 3, 2, 4))

df2 <- data.frame(row1 = c("A", "A", "B", "B", "B", "C", "C"),
                  row2 = c("aa", "bb", "aa", "bb", "cc", "aa", "cc"))


left_join(df2, df1)
#> Joining, by = c("row1", "row2")
#>   row1 row2 row3
#> 1    A   aa    1
#> 2    A   bb    5
#> 3    B   aa    6
#> 4    B   bb    8
#> 5    B   cc    9
#> 6    C   aa    3
#> 7    C   cc    4

创建于 2023-02-01 reprex v2.0.2

【讨论】:

    猜你喜欢
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多