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      
3 3 dograbbit      cute

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

你可能感兴趣的:(R:Reduce函数)