合并数据框

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

上一篇:PHP中foreach使用


下一篇:shell脚本替换文件中字符