在R中合并具有不同长度和不同列级别的两个数据帧

时间:2015-01-07 01:23:02

标签: r

我在合并两个数据框时遇到问题,优先考虑小数据框,请考虑以下示例:

d1 
x  y

a  4
b  5
c  9


d2
y  z

5  2
7  8
9  3
4  1
6  8

如果d1的y列= d2的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 个答案:

答案 0 :(得分:1)

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

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

您可以通过以下方式将附加列z添加到d1

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

您收到的警告表示两个数据集中的列具有相同的名称,这些列不是您要匹配的列。要查看字段名称中的重叠,请使用:

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

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