我的数据框如下:
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
谢谢!
答案 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
包。