2015-01-07 48 views
-1

不同的长度和不同的列水平两个数据帧我有合并两个数据帧与小数据帧是优先考虑下面的例子请了一个问题:合并与R中

d1 
x y 

a 4 
b 5 
c 9 


d2 
y z 

5 2 
7 8 
9 3 
4 1 
6 8 

我想要得到相同如果如下所示长度为小数据帧长度d2为d1 = Y列Y的列:

merged 
y x z 

4 a 1 
5 b 2 
9 c 3 

我写了下面的代码,但不似乎工作:

merged <- merge(d1, d2, by.x="y", by.y="y") 

任何人都可以帮忙吗?

谢谢。

+1

'合并(df1,df2)'应该这样做。我的代码也得到了正确的结果。什么对它不起作用?什么是错误信息? –

+0

“警告消息:在merge.data.frame(d1,d2,by.x =”y“,by.y =”y“)中:列名称'y'在结果中被复制”并给我“5”行而不是3. – aliocee

+0

@aliocee你有没有试过RichardScriven建议的那个。它应该得到你想要的。如果你想指定'by',它应该是'merge(df1,df2,by ='y')',你的代码也会给出结果而没有任何警告。你应该提供一个给出警告的例子,但事实并非如此。 – akrun

回答

1

如果颠倒数据集的顺序,如你可以在输出中的5行:

d1$z<-d2$z[match(d1$y,d2$y)] 

merge(d2, d1, by="y") 

你可以通过附加列z添加到d1您收到的警告表明两个数据集中有相同名称的列,这些列并不是您所匹配的列。若要查看字段名称重叠,使用方法:

intersect(names(d1),names(d2)) 

(这恰好也是默认值参数by)。