提出问题
如何将多个数据框按照同一列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()