与R中的重复值合并
我有两个数据帧 db1类似于:与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
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)