与R中的重复值合并

与R中的重复值合并,r,join,merge,duplicates,R,Join,Merge,Duplicates,我有两个数据帧 db1类似于: date.prix;var1;var2 2012-10-02;pluf;plof 2012-12-11;pam;pim 2013-05-17;plop;plip ... db2-like: date.de.cotation;var3;var4 2012-10-02;tutu;toto 2012-10-02;ting;tong 2013-05-17;gui;guou ... 连接为date.prix=date.de.cotation 我想要像这样的东西: dat

我有两个数据帧

db1类似于:

date.prix;var1;var2
2012-10-02;pluf;plof
2012-12-11;pam;pim
2013-05-17;plop;plip
...
db2-like:

date.de.cotation;var3;var4
2012-10-02;tutu;toto
2012-10-02;ting;tong
2013-05-17;gui;guou
...
连接为date.prix=date.de.cotation

我想要像这样的东西:

date.prix;var1;var2;var3;var4
2012-10-02;pluf;plof;tutu;toto
2012-12-11;pam;pim;NA;NA
2013-05-17;plop;plip;gui;guou
因此:

  • 如果db2中存在重复项,我需要第一个的值
  • 如果db2中没有日期的值,那么我需要NAs
我们可以使用和功能:

db2_2 <- db2[!duplicated(db2$date.de.cotation), ] # remove everything but first instance
merge(db1, db2_2, by.x = 'date.prix', by.y = 'date.de.cotation', all.x = TRUE)

#    date.prix var1 var2 var3 var4
# 1 2012-10-02 pluf plof tutu toto
# 2 2012-12-11  pam  pim <NA> <NA>
# 3 2013-05-17 plop plip  gui guou

db2_2在
数据中左连接。表
有一个
mult
参数:
mult='first'
将只保留
db2
中的第一个匹配行

library(data.table)

db1 <- fread('date.prix;var1;var2
2012-10-02;pluf;plof
2012-12-11;pam;pim
2013-05-17;plop;plip')

db2 <- fread('date.de.cotation;var3;var4
2012-10-02;tutu;toto
2012-10-02;ting;tong
2013-05-17;gui;guou')

# if db1 and db2 are not data.table, do: setDT(db1); setDT(db2);

db2[db1, on = .(date.de.cotation = date.prix), mult = 'first']
#    date.de.cotation var3 var4 var1 var2
# 1:       2012-10-02 tutu toto pluf plof
# 2:       2012-12-11   NA   NA  pam  pim
# 3:       2013-05-17  gui guou plop plip
库(data.table)

db1从
db2
中删除重复项,并使用
all.x=T
db1
db2
合并。此命令有一个错误:
在[.data.frame(base.concurrence2016,base.platts2016,on=(date.de.cotation=date.prix)中出错:未使用的参数(on=(date.de.cotation=date.prix),mult=“first”)
@celianou,正如我在对上述代码的评论中所说的,如果它们是
data.frame
setDT(db1);setDT(db2)