太久没更新了,让我们更新一下!
全篇随心所欲,英语比日语还烂的程度.
(咖啡又喝高了)

前言

当我们数据分析中产生了一堆中间数据(≥3),需要把他们合并成一个新的Dataset,使用bind_rows需要打一堆(df1,df2,df3,df4….),好麻烦,any simple solution?

数据准备

先让我们用mtcars无中生有几个数据集,生成的数据集会在workplace里,用ls()可以看到.

aa1 <- mtcars[1:3,]
aa2 <- mtcars[4:6,]
aa3 <- mtcars[7:9,]
aa4 <- mtcars[10:32,]

然后list这些文件

temp <- ls(pattern = c('aa'))  #生成一个文件名list

by the way,如果要提取workpalce里全部数据集(why?),we can just do that.

df <- sapply(.GlobalEnv,is.data.frame)
alldf <- names(df)[df]

合并方案一

from 同事 循环语句写起来

for (i in 2:length(temp)){
  new.data = get(temp[i])  #使用get提取这个dataset的内容而非'名字的字符串''
  merged.data = bind_rows(merge.data,new.data) #bind_rows!
}

很好,很棒,可以在循环语句里加中中间处理语句,比如修改变量格式一致~
坏处就是我写不来循环语句….

合并方案二

让万能的Hadley大神的purrr包出场解决循环问题

library(purrr) #载入包
merged.data <- map_dfr(mget(temp),bind_rows)

使用map循环一句话解决问题!感觉很棒棒!不愧是我们Hadley!

知识点:

  1. how to 批量选取数据集(not 批量导入文件)? ls(pattern=)
  2. how to 获得数据集的内容?mget()
  3. how to 批量合并并返回数据框?map_dfr

参考文献

  1. bind_rows for each result of a function in R

  2. How to rbind all the data.frames in your working environment?

  3. R语言中的purrr:map()函数