如何通过匹配R中的一列或另一列从另一个数据帧添加列?

如何通过匹配R中的一列或另一列从另一个数据帧添加列?,r,dataframe,R,Dataframe,我试图通过匹配一列或另一列的值,将数据帧的一列中的值添加到另一个数据帧中 例如: 我有两个不同长度的df,df2没有df1中列出的所有对: df1 df2 我想要这个: Year Territory Pair_ID type 1 1999 BGD 1 5 PO 2 2000 TAR 6 2 SB 3 2001 JAM 3 7 PO

我试图通过匹配一列或另一列的值,将数据帧的一列中的值添加到另一个数据帧中

例如:

我有两个不同长度的df,df2没有df1中列出的所有对:

df1

df2

我想要这个:

         Year Territory     Pair_ID  type
      1  1999       BGD         1 5   PO
      2  2000       TAR         6 2   SB
      3  2001       JAM         3 7   PO
      4  2002       TER         9 2   N/A
我不想完全合并这两个数据帧。我只想通过将df1中的“Pair”列与df2中的“Pair”列或“pair1”列匹配,将“type”列从df2添加到df1。我还想用“N/A”来填充在df2中找不到的对

我找不到任何解决这个具体问题的方法

我试过这个:

    df1$type <- df2$type[match(df1$Pairs, c(df2$pair,df2$pair1))]
df1$type尝试以下操作

typeA <- df2$type[match(df1$Pairs, df2$pair)]
typeB <- df2$type[match(df1$Pairs, df2$pair1)]
df1$type <- ifelse(is.na(typeA), typeB, typeA)
typeA试试下面的方法

typeA <- df2$type[match(df1$Pairs, df2$pair)]
typeB <- df2$type[match(df1$Pairs, df2$pair1)]
df1$type <- ifelse(is.na(typeA), typeB, typeA)

typeA对于
sqldf
来说是一个很好的例子:

library(sqldf)
sqldf("select df1.Year
             ,df1.Territory
             ,df1.Pair_ID
             ,df2.type

         from df1

           left join df2
                  on    df1.Pair_ID = df2.pair
                     or df1.Pair_ID = df2.pair1 
       ")
结果
年份地域对\u ID类型
1 1999 BGD 1 5 PO
2000焦油6 2锑
3 2001 JAM 3 7 PO
4 2002年之三9 2

sqldf的好例子:

library(sqldf)
sqldf("select df1.Year
             ,df1.Territory
             ,df1.Pair_ID
             ,df2.type

         from df1

           left join df2
                  on    df1.Pair_ID = df2.pair
                     or df1.Pair_ID = df2.pair1 
       ")
结果
年份地域对\u ID类型
1 1999 BGD 1 5 PO
2000焦油6 2锑
3 2001 JAM 3 7 PO
4 2002年之三9 2

在第二个数据框中
df2
列出了8列数据,但只提供了6列名称。@Tim Biegeleisen还有6列数据。例如,在第1行中,如果我理解正确,值“15”位于
df1
中的“pair”下,值“51”位于“pair1”下,您可以使用列名
Pair\u ID
来避免混淆。在第二个数据框
df2
中,您列出了8列数据,但只提供了6列名称。@Tim Biegeleisen还有6列数据。例如,在第1行中,值“15”位于
df1
中的“pair1”下,值“51”位于“pair1”下,如果我理解正确,您可以使用列名
pair\ID
来避免混淆。
  Year Territory Pair_ID type
1 1999       BGD     1 5   PO
2 2000       TAR     6 2   SB
3 2001       JAM     3 7   PO
4 2002       TER     9 2 <NA>