合并两个不同的列无视订单

时间:2016-05-24 19:25:35

标签: r join merge dplyr

我的数据框如下:

df1: 

 COL1     COL2   VALUE
   A        B      1
   A        C      1
   A        F      1
   A        D      1 
   B        E      1

df2: 

ADV1     ADV2    VALUE2
  B        A       1
  A        C       1
  B        E       1
  D        A       1

当我将它与df1合并时,我想忽略COL1和COL2的顺序。

因为你可以看到COL1:A和COL2:B在df1中没有出现,但这两个值确实存在于一行......因此我们索引匹配它。将NA值保持在df1也很重要。我认为这是一个完整的连接,但缓存是我想忽略COL1和COL2的顺序,并且colnames是不同的。

  COL1     COL2   VALUE   VALUE2 
   A        B      1        1
   A        C      1        1
   A        F      1        NA
   A        D      1        1
   B        E      1        1

谢谢!

1 个答案:

答案 0 :(得分:2)

一个解决方案是创建一个新的'将COL1 / COL2和ADV1 / ADV2按排序顺序组合在一起的列,并按以下方式使用该列连接:

if(isset($_GET['action']) && $_GET['action'] == 'read'){

结果输出如下:

library(dplyr)
df1$NEWCOL <- paste(pmin(df1$COL1, df1$COL2),
                    pmax(df1$COL1, df1$COL2),
                    sep = '')
df2$NEWCOL <- paste(pmin(df2$ADV1, df2$ADV2),
                    pmax(df2$ADV1, df2$ADV2),
                    sep = '')
df <- left_join(df1, df2)

当然,您可以按如下方式删除不需要的列:

  COL1 COL2 VALUE NEWCOL ADV1 ADV2 VALUE2
1    A    B     1     AB    B    A      1
2    A    C     1     AC    A    C      1
3    A    F     1     AF <NA> <NA>     NA
4    A    D     1     AD    D    A      1
5    B    E     1     BE    B    E      1

输出如下:

df <- select(df, COL1, COL2, VALUE, VALUE2)

我在给定输入数据时使用 COL1 COL2 VALUE VALUE2 1 A B 1 1 2 A C 1 1 3 A F 1 NA 4 A D 1 1 5 B E 1 1 。如果需要合并双方,您当然可以使用left_join来代替同一个full_join包。