R:Reduce函数

提出问题

如何将多个数据框按照同一列merge呢?

解决问题

一个一个merge固然可以,但是费时间且代码看起来十分丑陋,Reduce函数很好解决了这个问题
先看一个例子:

## cumsum 函数用于分步计算累计和
> cumsum(1:4)
[1] 1 3 6 10
## 利用 Reduce也可以实现
> Reduce("+",c(1:4),accumulate =TRUE)
[1] 1 3 6 10
## 若将accumulate赋为FALSE (若不加accumulate则默认为FALSE)
> Reduce("+",c(1:4),accumulate =FALSE)
[1] 10

从例子中可以看出来Reduce函数是将每次计算后的结果保留,并与下一个数字进行计算,这是和 apply 函数不同的。
因此在对多个数据框进行merge时,可如下操作:

## 定义三个数据框
> df1 <- data.frame(id=c(1,2,3),name=c('Joseph','Summer','dograbbit'))
> df2 <- data.frame(id=c(1,2),money=c('0','100'))
> df3 <- data.frame(id=c(1,3),looking=c('handsom','cute'))
## Reduce
> Reduce(function(x,y) merge(x,y,by="id",all.x=TRUE),list(df1,df2,df3),accumulate =FALSE)
 id   name   money   looking
1 1 Joseph     0     handsom
2 2 Summer    100      <NA>
3 3 dograbbit <NA>     cute

更多Reduce函数的应用可以参考文章R:Reduce()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值