【问题标题】:How to add a column from another dataframe by matching one column or another column in R?如何通过匹配 R 中的一列或另一列从另一个数据框中添加一列?
【发布时间】:2017-07-25 01:24:21
【问题描述】:

我正在尝试通过匹配一列或另一列的值将数据帧的一列中的值添加到另一个数据帧。

例如:

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

df1

         Year Territory     Pair_ID
      1  1999       BGD         1 5
      2  2000       TAR         6 2
      3  2001       JAM         3 7
      4  2002       TER         9 2

df2

         ID1 ID2 pair pair1 type detail
      1  1   5   1 5  5 1   PO   N/A
      2  2   6   2 6  6 2   SB   N/A
      3  3   7   3 7  7 3   PO   N/A
      4  4   8   4 8  8 4   SB   N/A
      5  4   3   4 3  3 4   SB   N/A

我想要这个:

         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

我不想完全合并这 2 个数据框。我只想通过将 df1 中的“Pair”列与 df2 中的“pair”列或“pair1”列匹配,将 df2 中的“type”列添加到 df1。我还希望它为 df2 中未找到的对填写“N/A”。

我找不到任何解决此特定问题的方法。

我试过这个:

    df1$type <- df2$type[match(df1$Pairs, c(df2$pair,df2$pair1))]

但它只匹配“pair”列,忽略“pair1”列。

【问题讨论】:

  • 在第二个数据框df2 中列出了 8 列数据,但只提供了 6 个列名。
  • @Tim Biegeleisen 还有 6 列数据。例如,在第 1 行中,值“1 5”位于“pair”下方,值“5 1”位于“pair1”下方
  • df1 中,如果我理解正确,您可以使用列名Pair_ID 以避免混淆。

标签: r dataframe


【解决方案1】:

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 
       ")

结果

  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>

【讨论】:

    【解决方案2】:

    试试类似的东西

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多