如何批量加载多个.RData文件并合并为单个data.frame
批量加载合并.RData文件的实现说明
你提供的写法不可行,核心原因
load() 函数的默认返回值是加载到环境中的对象名称的字符向量,并非对象本身的数据,因此直接传入map_dfr只会得到所有对象名的拼接结果,无法完成数据合并。
可行实现方案
方案1:适配「每个.RData文件仅存储1个数据框」的场景(匹配你的当前用法)
library(tidyverse) list.files( path = ".", pattern = "\\.RData$", # 正则匹配更严谨,避免匹配到文件名中间带RData的文件 full.names = TRUE ) %>% map_dfr( .f = function(x) { # 新建临时环境存储加载内容,避免污染全局环境的变量 temp_env <- new.env() load(x, envir = temp_env) # 提取临时环境中存储的唯一数据框 get(ls(temp_env)[1], envir = temp_env) } )
运行上述代码可直接得到所有.RData文件内数据框按行合并的结果。
方案2:适配「单个.RData文件存储多个同结构数据框」的场景
如果部分.RData内存储了多个需要合并的同结构数据框,可使用以下写法:
library(tidyverse) list.files( path = ".", pattern = "\\.RData$", full.names = TRUE ) %>% map( .f = function(x) { temp_env <- new.env() load(x, envir = temp_env) # 提取单文件内所有数据框先合并 eapply(temp_env, identity) %>% bind_rows() } ) %>% bind_rows()
内容的提问来源于stack exchange,提问作者MYaseen208
相关产品推荐
相关产品推荐

