2012-05-28 57 views
1

我想合并两个数据框与ID,我想先合并所有匹配的ID,然后发现不匹配,我发现合并它可以合并共同ids.for例如功能:在两个不同的表中创建新的数据框与两个不同的表不匹配

m1 = merge(df1, df2, by=c("id")) 

现在我想创建与数据帧2的IDS不匹配的数据帧新的数据框1.

可否请你告诉我该命令我应该找吗?

例如:

我有以下两个数据集:

enter image description here DF1 enter image description here DF2

我想从DF2创建ID的新数据框,并非DF1。例如df2中的id =“a3”和“c3”。

enter image description here

我的样本数据:

df1 =data.frame(id= c("a1","a2","b1","b2","c1","c2"), value= 1:6) 
df2 =data.frame(id= c("a1","a2","a3","b1","c1","c3"), value= 7:12) 

非常感谢,阿燕

回答

5

如果你想使用merge,这里是做这件事:

df_merged <- merge(df2, df1, by.x="id", by.y="id", all.x=TRUE) 
df_merged[is.na(df_merged$value.y),] 
    id value.x value.y 
3 a3  9  NA 
6 c3  12  NA 

由于您的列名在两个data.frames ID中entust和merge按常用列名进行合并,您必须明确地告诉函数列名称要使用,这里是id

但是你应该问自己,如果你真的想合并在这里?如果您只想要df2中不在df1中的那些行,为什么不使用类似的东西?

df2[!(df2$id %in% df1$id), ] 
    id value 
3 a3  9 
6 c3 12 
+0

非常感谢你,这正是我想要做的。你是对的,合并命令不适合我正在尝试做的事情,%in%正是我想要学习的东西。再次感谢 :) – Achak