首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将包含同名对象的多个.RData文件合并为一个.RData文件

将包含同名对象的多个.RData文件合并为一个.RData文件
EN

Stack Overflow用户
提问于 2013-02-08 01:52:39
回答 2查看 6.1K关注 0票数 6

我有许多包含一个数据帧的许多.RData文件,这些数据帧是我在前面的分析中保存的,并且数据帧对于加载的每个文件都具有相同的名称。例如,使用load(file1.RData)我得到一个名为'df‘的数据帧,然后使用load(file2.RData)我得到一个同名为'df’的数据帧。我想知道是否有可能将所有这些.RData文件组合成一个大的.RData文件,因为我需要一次加载所有这些文件,每个df的名称等于文件名,这样我就可以使用不同的数据帧。

我可以使用下面的代码来做这件事,但是它是非常复杂的,必须有一个更简单的方法来做这个…谢谢你的建议。

假设我有3个.RData文件,并且想要将它们都保存在一个名为"main.RData“的文件中,并指定它们的名称(现在它们都以‘df’的形式出现):

代码语言:javascript
复制
all.files = c("/Users/fra/file1.RData", "/Users/fra/file2.RData", "/Users/fra/file3.RData")
assign(gsub("/Users/fra/", "", all.files[1]), local(get(load(all.files[1]))))
rm(list= ls()[!(ls() %in% (ls(pattern = "file")))])
save.image(file="main.RData")


all.files = all.files = c("/Users/fra/file1.RData", "/Users/fra/file2.RData", "/Users/fra/file3.RData")

for (f in all.files[-1]) {
  assign(gsub("/Users/fra/", "", f), local(get(load(f))))
  rm(list= ls()[!(ls() %in% (ls(pattern = "file")))])
  save.image(file="main.RData")
}
EN

回答 2

Stack Overflow用户

发布于 2016-01-11 07:21:16

这里有一个合并了几个现有帖子的选项

代码语言:javascript
复制
all.files = c("file1.RData", "file2.RData", "file3.RData")

将多个数据帧读入单个命名列表(How can I load an object into a variable name that I specify from an R data file?)

代码语言:javascript
复制
mylist<- lapply(all.files, function(x) {
  load(file = x)
  get(ls()[ls()!= "filename"])
})

names(mylist) <- all.files #Note, the names here don't have to match the filenames

您可以保存列表,也可以在保存之前将数据帧传输到全局环境(Unlist a list of dataframes)

代码语言:javascript
复制
list2env(mylist ,.GlobalEnv)

或者,如果数据帧相同,并且您希望创建单个大型数据帧,则可以折叠列表并添加一个变量,其中包含构成文件的名称(Dataframes in a list; adding a new variable with name of dataframe)。

代码语言:javascript
复制
all <- do.call("rbind", mylist)
all$id <- rep(all.files, sapply(mylist, nrow))
票数 5
EN

Stack Overflow用户

发布于 2013-02-08 02:00:33

我认为我看到的最好的答案是下面的代码,它是我从一个我现在无法追踪到的SO答案中复制过来的。向原作者道歉。

代码语言:javascript
复制
resave <- function(..., list = character(), file) {
   previous  <- load(file)
   var.names <- c(list, as.character(substitute(list(...)))[-1L])
   for (var in var.names) assign(var, get(var, envir = parent.frame()))
   save(list = unique(c(previous, var.names)), file = file)
}
#I took advantage of the fact the load function 
#returns the name of the loaded variables, so 
#I could use the function's environment instead of creating one.
#And when using get, I was careful to only look in the 
#environment from which the function is called, i.e. parent.frame()
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14757668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档