R语言里两个数据框也可以用merge()函数合并在一起。
假设数据d1和d2有一个或多个同名的列,利用merge(d1,d2)可以合并这两个数据框,如下:
d1=data.frame(kids=c("Jack","Jill","Jillian","John"),states=c("CA","MA","MA","HI"))
d2=data.frame(age=c(10,7,12),kids=c("Jill","Lillian","Jack"))
d=merge(d1,d2);d
运行结果如下:
> d1
kids states
1 Jack CA
2 Jill MA
3 Jillian MA
4 john HI
> d2
age kids
1 10 Jill
2 7 Lillian
3 12 Jack
> d
kids states age
1 Jack CA 12
2 Jill MA 10
这两个数据框都有变量kids,R在两个数据框里查找kids变量相同的行(即Jack和Jill对应的行)。再用查找到的行和两个数据框里所有列(kids,states,ages)然后创建新的数据框。
merge()有两个参数by.x和by.y,用于标出两个数据框里含有相同信息但名称不同的两个变量,例如:
d3=data.frame(ages=c(12,10,7),pals=c("Jack","Jill","Lillian"));d3
ages pals
1 12 Jack
2 10 Jill
3 7 Lillian
dd=merge(d1,d3,by.x="kids",by.y="pals");dd
kids states ages
1 Jack CA 12
2 Jill MA 10
重复匹配会在结果中全部出现,有时会出现错误的结果,如:
d2a=rbind(d2,list(15,"Jill"));d2a
age kids
1 10 Jill
2 7 Lillian
3 12 Jack
4 15 Jill
ddd=merge(d1,d2a);ddd
kids states age
1 Jack CA 12
2 Jill MA 10
3 Jill MA 15
在d2a中有两个Jill,一个是d1中住在MA的Jill,而另一个Jill的居住地未知。调用merge(d1,d2a)得出 的结果按道理应该只能出现一个Jill(MA),但是现在却又两个Jill,故选择匹配变量时必须小心谨慎,避免数据框中的重复数据。
摘自《R语言编程艺术》Page 92-93