将数据框与非唯一列合并

时间:2014-08-11 01:43:53

标签: r merge

我想创建一个新的数据框,从另一个数据框中借用一个ID变量。我想要合并的数据框在ID列中重复观察,这导致了一些问题。

DF1<-data.frame(ID1=rep(c("A","B", "C", "D", "E") , 2), X1=rnorm(10))
DF2<-data.frame(ID1=c("A", "B", "C", "D", "E"), ID2=c("V","W","X","Y" ,"Z"), X2=rnorm(5),     X3=rnorm(5))

我想通过ID1列将DF2 $ ID2附加到DF上。我的目标看起来像这样(我不想在目标&#39;数据框中使用DF2 $ X2和DF $ X3):

Goal<-data.frame(ID2=DF2$ID2, DF1)

我尝试过合并但它抱怨因为DF1 $ ID1不是唯一的。我知道R可以用一行代码来解决这个问题,但我似乎无法使我认识的函数发挥作用。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:3)

简单合并应该没有问题。使用您的样本数据

merge(DF1, DF2[,c("ID1","ID2")], by="ID1")

产生

   ID1          X1 ID2
1    A  0.03594331   V
2    A  0.42814900   V
3    B -2.17161263   W
4    B -0.33403550   W
5    C  0.95407844   X
6    C -0.23186723   X
7    D  0.46395514   Y
8    D -1.49919961   Y
9    E -0.20342430   Z
10   E -0.49847569   Z

答案 1 :(得分:1)

您还可以使用left_join

中的library(dplyr)
 library(dplyr)
 left_join(DF1, DF2[,c("ID1", "ID2")])
 #    ID1          X1 ID2
 #1    A -1.20927237   V
 #2    B -0.03003128   W
 #3    C -0.75799708   X
 #4    D  0.53946986   Y
 #5    E -0.52009921   Z
 #6    A  1.15822659   V
 #7    B -0.91976194   W
 #8    C  0.74620142   X
 #9    D -2.46452560   Y
#10   E  0.80015219   Z