合并数据框

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值