太久没更新了,让我们更新一下!
全篇随心所欲,英语比日语还烂的程度.
(咖啡又喝高了)
前言
当我们数据分析中产生了一堆中间数据(≥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!
知识点:
- how to 批量选取数据集(not 批量导入文件)?
ls(pattern=)
- how to 获得数据集的内容?
mget()
- how to 批量合并并返回数据框?
map_dfr